【发布时间】:2018-05-23 03:02:28
【问题描述】:
我在编写这个相当简单的程序时遇到了麻烦。我有两个类 A 和 B。B 有一个 A 的对象。我需要编写 B 的 Copy 构造函数,以便 B 的两个实例将具有不同的 A 实例。有什么巧妙的方法可以做到这一点?要做的一件事是获取 parm 的所有成员变量,创建一个新的 A 对象并分配这些成员变量。但是如果这个类有更多的成员变量,那就是一个问题。这个怎么写的简单呢?
class A
{
public:
int data;
A()
{
}
A(int parm) : data(parm)
{
}
A(const A&parm)
{
this->data = parm.data;
}
A& operator = (const A& parm)
{
if (this != &parm)
{
this->data = parm.data;
}
return *this;
}
~A()
{
cout << "A is destroyed";
}
};
class B
{
public:
A *a;
B()
{
a = new A(10);
}
B(const B&parm)
{
// How to copy the value of parm so this and parm have different A object
// this.a = parm.a --> both this and parm points to same A object
}
B& operator = (const B&parm)
{
if (this != &parm)
{
this->a = parm.a;
}
return *this;
}
~B()
{
// Null check
delete a;
}
};
【问题讨论】:
-
a{new A{*parm.a}},使用现代统一初始化语法。 -
"
/* Null check */ delete a;"。删除空指针是noop,不需要检查。 -
@Jarod42 当我有两个具有相同 A 实例的 B 对象时,我们不希望那里需要 NULL 检查吗?
-
我的意思是
A* a = nullptr; delete a;是有效的。
标签: c++ copy-constructor