我正在阅读“Scott Meyers 的Effective C++”,其中第 11 条建议在我的赋值运算符中使用“ copy-and-swap ”技术:
Widget& Widget::operator=(const Widget &rhs)
{
Widget temp(rhs); // Copy constructor
swap(temp); //Swap with *this
return *this;
}
但是在第 12 条中是这样写的:
我认为第 11 项和第 12 项是矛盾的。我理解错了吗?
最佳答案
在您提到的“由 Scott Meyers 撰写的有效 C++”的 2 次引用中,讨论了两个不同的方面。
我对 Item 12 的这部分的理解是这样的:如果你尝试编写如下内容(让复制赋值运算符调用复制构造函数)那么它会是错误的:
PriorityCustomer::PriorityCustomer(const PriorityCustomer& rhs)
: Customer(rhs), // invoke base class copy ctor
priority(rhs.priority)
{
logCall("PriorityCustomer copy constructor");
}
PriorityCustomer&
PriorityCustomer::operator=(const PriorityCustomer& rhs)
{
logCall("PriorityCustomer copy assignment operator");
this->PriorityCustomer(rhs); // This line is wrong!!!
return *this;
}