繁体   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