我有一个复制构造函数,如下所示:

Qtreenode(const QtreeNode * & n) {

    x=n->x;
    y=n->y;
    height=n->height;
    width=n->width;
    element=n->element;

}

我一周前写了这篇文章,今天回头看了一下,当我用swChild=new QtreeNode(*(n->swChild));调用copy构造函数时,我感到惊讶。但是当我调用它时,我会执行(*(n-> swChild)),这意味着那个 child 的值正确吗?为什么我的代码有效?

最佳答案

那不是复制构造函数。类的副本构造函数是采用类类型引用的构造函数。以下是复制构造函数,尽管第二个使用const引用,是迄今为止最常用的构造函数:

QTreeNode(QTreeNode&);
QTreeNode(const QTreeNode&);
QTreeNode(volatile QTreeNode&);
QTreeNode(const volatile QTreeNode&);

由于这不是副本构造函数,因此仍提供了隐式声明的副本构造函数。它被声明为QTreeNode(const QTreeNode& n),并且基本上只是复制该类的每个成员(即,它是“浅”副本,而不是“深”副本)。您的代码中使用的是此隐式声明的副本构造函数。

关于c++ - 复制构造函数中的指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5516098/

10-11 06:43