由于我的复制运算符完全符合我想要赋值运算符的功能,因此可以调用复制运算符。我看过类似的帖子,我尝试创建一个新的临时对象,我将其称为复制运算符,然后返回临时对象,但这不起作用。所以我尝试发回一个参考,但这也不起作用。
SelfDestructingMessage& SelfDestructingMessage::operator=(
SelfDestructingMessage &source){
this(source);
return *this;
}
如何返回引用,而不是副本?
你很近。您需要交换,以便您的赋值运算符看起来像这样:
struct my_object
{
my_object& operator=(my_object const& other)
{
my_object tmp(other);
swap(*this,other);
return *this;
}
};
您希望自己swap
成为nothrow
这样,以便您拥有异常安全。请注意tmp
,如果您只按值接受参数,您可以消除 name ,并且可能允许一些重要的优化。
这被称为“复制交换习语”。有很多来源,但最好在 Sutter 的 Exceptional C++ 中进行解释。他详细描述了它,一些变化,以及为什么它使一切变得更容易。当你将它与 pimpl 配对时,你可以获得大量的优势......在大多数情况下对性能的影响很小——有时它真的很重要,你不能做一个 pimpl(指针间接可以混淆预取器等)。
我不知道 WTF Michael Roy 是关于什么的。我确实*this = other
在复制构造函数中看到过类似的废话,但是每个做过这件事的开发人员也做了很多其他非常愚蠢的事情,最终让太多人头疼。仅仅因为某些人做了某事并不意味着你需要跟着他们走下悬崖变成胡说八道。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句