我有一个复制构造函数,如下所示:
Qtreenode(const QtreeNode * & n) {
x=n->x;
y=n->y;
height=n->height;
width=n->width;
element=n->element;
Run Code Online (Sandbox Code Playgroud)
}
我在一周前写过这篇文章,今天我回头看了一下,当我把这个复制构造函数称为swChild=new QtreeNode(*(n->swChild));
cc 时,我很惊讶于cc的争论是一个引用指针,对吗?但是当我调用它时,我会(*(n-> swChild)),这意味着那个孩子的价值对吗?为什么我的代码有效?
那不是复制构造函数.类的复制构造函数是一个构造函数,它接受类的类型的引用.以下任何一个都是复制构造函数,尽管第二个是const引用,是目前最常用的:
QTreeNode(QTreeNode&);
QTreeNode(const QTreeNode&);
QTreeNode(volatile QTreeNode&);
QTreeNode(const volatile QTreeNode&);
Run Code Online (Sandbox Code Playgroud)
由于这不是复制构造函数,因此仍提供隐式声明的复制构造函数.它被声明为QTreeNode(const QTreeNode& n)
并且基本上只复制该类的每个成员(即,它是"浅"副本,而不是"深"副本).正是这个隐式声明的复制构造函数在您的代码中使用.