[Q學習]QT對象模型:標識與值

在Qt的對象模型中,我們需要將一部分QT對C++新增的對象作爲標識(identity)而不是值(value)。這裏說一下標識和值的區別:值是拷貝的或者分配來的;標識則是克隆來的。克隆意味着建立新的標識,而不僅僅是舊標識的一份拷貝。舉個例子,雙胞胎是不同的標識(identity),他們看起來是一樣的,但是他們有不同的名字,不同的地點,和許多完全不同的社會關係網。
克隆一個標識是比拷貝和分配值更復雜的操作。我們在QT對象模型中看到這樣的情形。
一個QT對象:
1 也許有一個獨特的QObject::objectName()。如果我們拷貝一個Qt對象,我們將給這份拷貝什麼名字?
2 在對象層次中有位置。如果我們拷貝QT對象,這份拷貝將放在何處?
3 可以關聯到其他QT對象,來發送或者接受信號,如果們拷貝一個QT對象,我們如何將這些鏈接轉移到拷貝對象上?
4 可以在運行時增加新的屬性,這些屬相在聲明時則沒有。如果我們拷貝QT對象,是否拷貝對象包含了原始對象的新增屬性?

出於這樣的原因,QT對象被作爲標識(identity)對待而不是值(value)。標識是被克隆的,不是拷貝或者分配來的,同時克隆一個標識是比複製或者分配值更加複雜的操作。因此,QObject及其所有子類(直接子類或者間接子類)的拷貝構造函數和賦值運算符都是無效的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章