使用复制运算符作为赋值运算符

塞思·基利安

由于我的复制运算符完全符合我想要赋值运算符的功能,因此可以调用复制运算符。我看过类似的帖子,我尝试创建一个新的临时对象,我将其称为复制运算符,然后返回临时对象,但这不起作用。所以我尝试发回一个参考,但这也不起作用。

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

复制赋值运算符返回* this vs(* this)

来自分类Dev

C ++复制赋值运算符类

来自分类Dev

使用STL向量复制构造函数与赋值运算符

来自分类Dev

使用新的放置作为复制赋值运算符不好吗?

来自分类Dev

使用 OR 运算符进行布尔赋值

来自分类Dev

Java赋值运算符

来自分类Dev

Ruby + =赋值运算符

来自分类Dev

模糊赋值运算符

来自分类Dev

运算符 [] 后的赋值

来自分类Dev

抛出赋值运算符

来自分类Dev

复制构造函数和复制赋值运算符?

来自分类Dev

C ++:赋值运算符后的++运算符重载

来自分类Dev

使用>>运算符

来自分类Dev

复制构造函数而不是赋值运算符被调用

来自分类Dev

C ++:“ T a = b”-复制构造函数或赋值运算符?

来自分类Dev

赋值运算符与复制构造函数C ++

来自分类Dev

Java等效于C ++复制赋值运算符

来自分类Dev

通过赋值运算符的C ++动态数组的深层复制

来自分类Dev

复制构造函数,赋值运算符C ++

来自分类Dev

带有赋值运算符的类的C ++深层复制

来自分类Dev

派生类的复制赋值运算符

来自分类Dev

使用变量作为运算符-Powershell

来自分类Dev

使用扩展运算符作为参数

来自分类Dev

作为一般规则,应该复制赋值运算符std :: swap吗?

来自分类Dev

:=什么时候不能作为赋值运算符工作?

来自分类Dev

:=什么时候不能作为赋值运算符工作?

来自分类Dev

Gcc 使用 memcpy 进行隐式复制赋值运算符而不是成员方式复制

来自分类Dev

使用postfix运算符而不是赋值运算符的优点/局限性是什么?

来自分类Dev

如何快速重载赋值运算符