Pau*_*nta 50 c++ constructor operators copy-constructor assignment-operator
如果我覆盖operator=,复制构造函数会自动使用new运算符吗?同样,如果我定义了一个拷贝构造函数,会operator=自动"继承"拷贝构造函数的行为吗?
sgo*_*les 44
不,他们是不同的运营商.
复制构造函数用于创建新对象.它将现有对象复制到新构造的对象.复制构造函数用于从旧实例初始化新实例.将值中的变量传递给函数或作为函数的返回值时,不一定要调用它.
赋值运算符用于处理已存在的对象.赋值运算符用于将现有实例更改为与rvalue具有相同的值,这意味着如果实例具有内部动态内存,则必须销毁并重新初始化该实例.
有用的链接:
不,它们是不同的对象.
如果你担心的是复制构造函数和赋值运算符之间的代码重复,请考虑以下习语,名为copy和swap:
struct MyClass
{
MyClass(const MyClass&); // Implement copy logic here
void swap(MyClass&) throw(); // Implement a lightweight swap here (eg. swap pointers)
MyClass& operator=(MyClass x)
{
x.swap(*this);
return *this;
}
};
Run Code Online (Sandbox Code Playgroud)
这样,operator=将使用复制构造函数来构建一个新对象,该对象将在函数出口处*this与之交换(与旧this内部交换).
| 归档时间: |
|
| 查看次数: |
62833 次 |
| 最近记录: |