A类有2个对象A1和A2。
现在要将A2的成员值分配给A1,我可以使用简单的A1 = A2, 或使用复制构造函数,如: -
A (A &A2)
{
this.m = A2.m;
this.n = A2.n;
}
所以,我想知道哪一个更好,哪个选项适合,或者它们之间真的有什么区别吗?
答案 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并在析构函数中删除),那么你需要使用复制构造函数并创建每个字段的副本,否则你可能会访问无效状态的指针。