[英]When is copy-and-swap idiom not applicable
描述赋值运算符的潜在实现的链接将class_name& class_name::operator=(class_name)
为:
可以使用复制和交换习惯用法时复制赋值运算符的典型声明
并且class_name& class_name::operator=(const class_name&)
as:
当不能使用复制和交换习惯用法时,复制赋值运算符的典型声明
基本上我们总是希望在可能的情况下使用复制和交换,正如您在链接问题的优秀答案中所提到的那样,因为它将通过自我指派测试。
所以现在问题是为什么会议在http://www.cppreference.com上提到了?
假设我正在为虚拟类实现一个复制构造函数,我想向任何继承他们应该使用复制和交换习惯用法的人说清楚。 我该怎么办? 我可以通过在初始调用中为他们复制来帮助他们:
class_name& class_name::operator=(class_name)
这是一个按值复制的,所以任何子类的实现者都会看到我已经为它们制作了副本,所以他们需要做的只是交换。
现在,如果我有一个包含无法复制构造的成员的class_name
,例如,如果我的类具有unique_ptr
,使其无法复制构造,该怎么办? 我可以指出, 不通过赋值运算符的值参数进行复制,例如:
class_name& class_name::operator(const class_name&)
表明它将在任何子类的实现者上,以确保进行足够的检查以通过自我分配测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.