【发布时间】:2011-03-15 23:26:40
【问题描述】:
我重新创建了自己的复制构造函数,总体上对我来说很有意义。然而,关于做你自己的赋值运算符的话题,我需要有人帮我填空。
我几乎不明白您为什么在所有示例中都返回 *this,例如以下示例:
Foo & Foo::operator=(const Foo & f)
{
//some logic
return *this;
}
所以如果我有一些类似的陈述:
Foo f;
f.hour = 7;
Foo g;
g = f;
一旦赋值运算符运行,它就会返回对 g 对象的引用(*this)。所以现在的问题是,我现在不会有这样一个隐含的声明吗?:
g = g (g being a reference)
问题是,在此之前,仅设置对对象的引用会导致调用复制构造函数。在这种情况下,它不符合复制构造函数的签名。
【问题讨论】:
-
@In silico:或者,编写您的赋值运算符,以便它们可以使用自赋值(这通常是具有异常安全赋值运算符的结果)。
-
我的问题甚至超出 *this 是:如果我返回一个对象的引用并将其存储到一个普通对象中,如果不调用复制构造函数会发生什么。就我而言,我已经写好了赋值运算符,所以不会调用复制构造函数。
-
查找用于实现赋值运算符的复制交换 idium。它是异常安全的,意味着您不需要显式检查对 self 的分配(除非您也想要)。
标签: c++