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