如果一个类有一个指针,我们必须通过重载赋值运算符来进行深度复制(浅拷贝不正确)。
那么,如果一个类有成员向量,是否有必要进行深层复制(通过重载operator=
)?
答案 0 :(得分:2)
如果一个类有一个指针,我们必须使用assigment运算符进行深度复制 重载(不是浅拷贝)。
仅当该指针是所谓的“拥有”指针时,即该类在语义上拥有指向的资源并负责其最终释放或销毁。
指针也可以是所谓的“观察”指针,它指向代码的另一部分负责的东西。观察指针类似于引用。
在盲目地在任何地方实施深层复制之前,请记住这一点。
如果一个类有必要进行深度复制(operator =重载) 会员矢量? ?
仅当它实际上是指向向量和的指针时,如果该指针是拥有指针。
实际情况绝对不是这样。
我假设你真的在谈论一个普通的非指针成员变量:
class Example
{
// ...
std::vector<int> v;
};
在这种情况下,您根本不需要处理指针。 std::vector
自动管理所有内容。
答案 1 :(得分:1)
std::vector
可以照顾好自己。你不需要做任何特别的事情。它有自己的赋值运算符,可以进行适当的复制。