重點 QObject 的拷貝構造和賦值操作 私有

2022-06-28 23:06:18 字數 752 閱讀 8390

qobject 中沒有提供乙個拷貝建構函式和賦值操作符給外界使用,其實拷貝構造和賦值的操作都是已經宣告了的,但是它們被使用了q_disable_copy () 巨集放在了private區域。因此所有繼承自qobject的類都使用這個巨集宣告了他們的拷貝建構函式和賦值操作符為私有。

為什麼要這樣做?

我 們都知道qt對標準c++增加了一些功能:signals, slots, object properties, events, event filters, string translation, timers,object trees, guarded pointers, dynamic cast.

新加入的這些功能就要求我們把每乙個qobject的物件看做是唯一(identities)的。唯一的意思就是不能通過拷貝或者賦值操作

製作出乙個一模一樣的複製體。

試 想如果我們有乙個qpushbutton物件btnsubmit,如果我們可以複製出乙個和btnsubmint完全一樣的button物件,那麼新的 button物件的名字應該是什麼?如果也叫btnsubmit,當我們給其中的btnsubmit接收事件或發出訊號時,系統如何區分把事件由哪個 button物件接收,或者哪個物件傳送了訊號?

我們知道在各種容器中能以value方式存放的型別,必須有預設的建構函式,拷貝建構函式和賦值操作。由於qobject及所有繼承自它的子類都沒 有提供拷貝構造和賦值操作,當我們使用qlist時,編譯器就會報錯。如果我們要在容器中儲存這中型別的物件,我們就要使 用它們的指標。如qlist

**:

QObject 的拷貝構造和賦值操作

qoject 中沒有提供乙個拷貝建構函式和賦值操作符給外界使用,其實拷貝構造和賦值的操作都是已經宣告了的,但是它們被使用了q disable copy 巨集放在了private區域。因此所有繼承自qobject的類都使用這個巨集宣告了他們的拷貝建構函式和賦值操作符為私有。為什麼要這樣做?我們都知道q...

QObject的拷貝建構函式與賦值運算子

本文主要是針對qobject的拷貝建構函式和賦值運算子進行說明。先來看一下拷貝建構函式定義 拷貝建構函式,又稱複製建構函式,是一種特殊的建構函式,它由編譯器呼叫來完成一些基於同一類的其他物件的構建及初始化。其唯一的形參必須是引用,但並不限制為const,一般普遍的會加上const限制。此函式經常用在...

拷貝建構函式重點整理

參考鏈結下文章,總結的 示例 classname const classname c 就是我們自定義的拷貝建構函式。拷貝建構函式是一種特殊的建構函式,函式的名稱必須與類名一致,它必須的乙個引數是本型別的乙個引用變數。當類物件以值傳遞方式傳入引數時 物件以值傳遞方式傳入形參時,會先生成乙個臨時變數te...