好的,我正在阅读“有效的C ++”,第12项说请不要在复制构造函数中调用复制赋值。但是在我尝试这样做之后,它确实有效。所以我想问为什么,我不能在复制构造函数中重用复制赋值代码?
答案 0 :(得分:0)
假设您在copy-constructor中使用copy-assignment运算符。然后你就失去了为赋值运算符实现copy-and-swap惯用语的能力:
struct A
{
A (const A &a)
{
*this = a; // Assignment to a not yet constructed object is not well
}
A &operator=(A a) // Pass by value
{
// ...
}
};
A a1, a2;
a1 = a2; // Infinite recursion!
不可能发生无限递归。
答案 1 :(得分:0)
构造函数创建一个新对象;赋值运算符修改现有对象。你不能使用赋值运算符来创建一个新对象:它不知道如何做到这一点,即使它似乎在简单的情况下工作。