更喜欢哪个,复制构造函数或对象赋值?

时间:2014-07-18 17:06:12

标签: c++ copy-constructor

A类有2个对象A1和A2。

现在要将A2的成员值分配给A1,我可以使用简单的A1 = A2, 或使用复制构造函数,如: -

A (A &A2)
{
   this.m = A2.m;
   this.n = A2.n;
}

所以,我想知道哪一个更好,哪个选项适合,或者它们之间真的有什么区别吗?

2 个答案:

答案 0 :(得分:11)

首先,您需要执行this->m,因为this是指针。

其次,复制构造函数通常应该使用const A&

第三,如果需要实现复制构造函数,则可能还需要实现赋值运算符。在这种情况下,我不确定你是否真的需要实现它们(只是默认它们)。

第四,复制构造函数和赋值运算符用于不同的情况:

A A1 = A2; // Copy constructor
A1 = A2; // Assignment

你应该同时提供。

第五,您最好使用成员初始化列表编写构造函数:

A(const A& A2) 
  : m(A2.m), n(A2.n)
{ }

答案 1 :(得分:1)

这取决于你想要达到的目标。

如果要对对象进行浅层复制,那么简单的赋值就足够了。

但是,如果你的对象管理指针(在构造函数中调用new并在析构函数中删除),那么你需要使用复制构造函数并创建每个字段的副本,否则你可能会访问无效状态的指针。