QObject 的拷貝構造和賦值操作

2021-07-26 07:13:48 字數 763 閱讀 4944

qoject 中沒有提供乙個拷貝建構函式和賦值操作符給外界使用,其實拷貝構造和賦值的操作都是已經宣告了的,但是它們被使用了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 的拷貝構造和賦值操作 私有

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

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

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

拷貝構造和拷貝賦值

注意指標型別成員變數的深拷貝問題 拷貝構造屬於定義,並賦值 拷貝賦值屬於已經定義,只是賦值。拷貝構造的深拷貝,因為如果提供了拷貝建構函式,則構造該物件時使用的是拷貝建構函式。在拷貝建構函式中只需要 分配新資源,拷貝新內容,返回自引用即可。但是在拷貝賦值函式中,如果存在指標成員變數一般在物件定義時已經...