[英]Pointer in copy constructor
我有一個復制構造函數,如下所示:
Qtreenode(const QtreeNode * & n) {
x=n->x;
y=n->y;
height=n->height;
width=n->width;
element=n->element;
}
我一周前寫了這篇文章,今天回頭看了一下,當我用swChild=new QtreeNode(*(n->swChild));
調用復制構造函數時,我感到驚訝swChild=new QtreeNode(*(n->swChild));
對cc的爭論只是參考,對吧? 但是當我調用它時,我會執行(*(n-> swChild)),這意味着那個孩子的價值正確嗎? 為什么我的代碼有效?
那不是復制構造函數。 類的副本構造函數是采用類類型引用的構造函數。 以下是復制構造函數,盡管第二個使用const引用,是迄今為止最常用的構造函數:
QTreeNode(QTreeNode&);
QTreeNode(const QTreeNode&);
QTreeNode(volatile QTreeNode&);
QTreeNode(const volatile QTreeNode&);
由於這不是副本構造函數,因此仍提供了隱式聲明的副本構造函數。 它被聲明為QTreeNode(const QTreeNode& n)
並且基本上只是復制該類的每個成員(即,它是“淺”副本,而不是“深”副本)。 您的代碼中使用的是此隱式聲明的副本構造函數。
那不是一個復制構造函數,它只是一個常規的舊構造函數。 復制構造函數將使用const QtreeNode&
,而不是const QtreeNode*&
。
由於您沒有定義副本構造函數,因此編譯器為您創建了一個。 那就是在swChild=new QtreeNode(*(n->swChild));
行中被調用的那個swChild=new QtreeNode(*(n->swChild));
,因為您要傳遞QtreeNode
而不是指向它的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.