gpt4 book ai didi

c++ - copy-and-swap 技术在赋值运算符函数中使用复制构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:19 24 4
gpt4 key购买 nike

我正在阅读“Effective C++ by Scott Meyers”,其中第 11 项建议在我的赋值运算符中使用“ copy-and-swap ”技术:

Widget& Widget::operator=(const Widget &rhs)
{
Widget temp(rhs); // Copy constructor
swap(temp); //Swap with *this
return *this;
}

但是在 Item 12 中是这样写的:

It makes no sense to have copy assignment operator call the copy constructor.

我认为第 11 项和第 12 项是矛盾的。我理解错了吗?

最佳答案

在您提到的“Effective C++ by Scott Meyers”的 2 个引用中,讨论了 2 个不同的方面。

  • 在第 11 项的代码片段中,Scott 展示了一种实现赋值运算符的方法。
  • 在第 12 项中,您提到的引用涉及避免赋值运算符和复制构造函数之间的代码重复。引文上方的一段说:

the two copying functions will often have similar bodies, and this may tempt you to try to avoid code duplication by having one function call the other.

我对 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;
}

关于c++ - copy-and-swap 技术在赋值运算符函数中使用复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38834277/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com