如果一个类有一个指针,我们必须通过重载赋值操作符来创建一个深度拷贝(浅拷贝不正确)。默认Assigment运算符是否适用于向量?
那么,如果一个类有一个成员向量,是否有必要做一个深层复制(通过重载operator=
)?
如果一个类有一个指针,我们必须通过重载赋值操作符来创建一个深度拷贝(浅拷贝不正确)。默认Assigment运算符是否适用于向量?
那么,如果一个类有一个成员向量,是否有必要做一个深层复制(通过重载operator=
)?
如果一个类有一个指针,我们必须用分配操作符 重载(而不是浅拷贝)来做深度拷贝。
仅当该指针是所谓的“拥有”指针时,即该类语义上拥有指向的资源并负责其最终的释放或销毁。
指针也可能是一个所谓的“观察”指针,它指向代码的另一部分负责的内容。观察指针与参考相似。
请牢记这一点,然后才能盲目地在各处实施深度复制。
那么如果一个类有 成员向量,那么是否需要深拷贝(运算符=重载)呢? ?
仅当它实际上是指向矢量和的指针(如果该指针是拥有指针的话)。
这实际上从来就不是这种情况。
我假设你真的在谈论一个正常的非指针成员变量反正:
class Example
{
// ...
std::vector<int> v;
};
在这种情况下,你不必在所有处理指针。 std::vector
自动管理一切。
关于术语的注意事项:您不要*重载*赋值运算符。超载有另一个含义。你在这里做的是定义你自己的赋值运算符版本,而不是依靠编译器自动生成的默认版本。 –