sta*_*tas 29 c++ copy-constructor
复制构造函数的这种实现有一些缺点吗?
Foo::Foo(const Foo& i_foo)
{
*this = i_foo;
}
Run Code Online (Sandbox Code Playgroud)
我记得,在某些书中建议从赋值运算符调用复制构造函数并使用众所周知的交换技巧,但我不记得了,为什么......
sbi*_*sbi 21
是的,这是一个坏主意.将首先初始化用户定义类型的所有成员变量,然后立即覆盖.
那个交换技巧是这样的:
Foo& operator=(Foo rhs) // note the copying
{
rhs.swap(*this); //swap our internals with the copy of rhs
return *this;
} // rhs, now containing our old internals, will be deleted
Run Code Online (Sandbox Code Playgroud)
operator=()
在构造函数中调用有两个潜在的缺点和潜在的好处.
无论是否指定值,构造函数都将初始化所有成员变量,然后operator=
再次初始化它们.这增加了执行复杂性.您需要明智地决定何时会在代码中创建不可接受的行为.
你的构造函数和operator=
紧密耦合.复制对象时,还需要在实例化对象时执行的所有操作.同样,你必须聪明地确定这是否是一个问题.
归档时间: |
|
查看次数: |
17309 次 |
最近记录: |