簡體   English   中英

復制構造函數中的指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM