在复制构造函数中的指针

时间:2011-04-01 16:22:14

标签: c++ pointers

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

Qtreenode(const QtreeNode * & n) {

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

}

我在一周前写过这篇文章,今天我回头看了一下,当我用swChild=new QtreeNode(*(n->swChild));调用复制构造函数时,我感到很惊讶。对cc的争论是一个引用指针,对吧?但是,当我打电话给它时,我会(*(n-> swChild)),这意味着那个孩子的价值对吗?为什么我的代码有效?

2 个答案:

答案 0 :(得分:5)

这不是复制构造函数。类的复制构造函数是一个构造函数,它接受类的类型的引用。以下任何一个都是复制构造函数,尽管第二个是const引用,是迄今为止最常用的:

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

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

答案 1 :(得分:1)

那不是复制构造函数,它只是一个常规的旧构造函数。复制构造函数将采用const QtreeNode&,而不是const QtreeNode*&

由于您没有定义复制构造函数,编译器为您创建了一个。这是在swChild=new QtreeNode(*(n->swChild));行中调用的那个,因为你传递了一个QtreeNode而不是一个指针。