【发布时间】:2014-07-05 21:08:19
【问题描述】:
这是我的代码的一个简单示例
class base
{
protected:
int value;
public:
base();
base(const int);
base(const base &);
~base();
];
class derived:public base
{
protected:
derived * next; // a pointer to the same datatype.
public:
derived();
derived(const int);
derived(const base &);
derived(const derived &);// This is the problem.
~derived();
... ...
};
我的问题是派生类的拷贝构造函数怎么写,因为派生类内部有一个指向派生类的指针作为数据成员。我需要深拷贝来复制这个指针“派生*下一个”吗? “下一个 -> 下一个”或“下一个 -> 下一个 > 下一个”怎么样?它看起来像一个无限循环。
这是我目前写的内容
derived::derived(const derived & source):base(source)
{
if(next)
delete next;
next = new derived(source.next);
}
【问题讨论】:
-
derived & next;不是指针,而是引用。您还缺少一个虚拟析构函数。 -
您可以从析构函数的主体中推断出您需要知道的一切。析构函数告诉你期望什么类不变量。推论。如果没有看到析构函数,我们不可能知道答案。
-
您可以定义类的语义。 应该复制它做什么?
-
new derived(source.next)传递的是指针而不是引用。您还应该定义一个停止条件。` -
不管你想要复制的语义是什么,我认为你的
delete next有问题,因为你会删除源仍然指向的对象。
标签: c++ oop pointers copy-constructor deep-copy