默认赋值运算符适用于向量?

时间:2017-10-28 15:46:02

标签: c++ c++11 stdvector deep-copy assignment-operator

如果一个类有一个指针,我们必须通过重载赋值运算符来进行深度复制(浅拷贝不正确)。

那么,如果一个类有成员向量,是否有必要进行深层复制(通过重载operator=)?

2 个答案:

答案 0 :(得分:2)

  

如果一个类有一个指针,我们必须使用assigment运算符进行深度复制   重载(不是浅拷贝)。

仅当该指针是所谓的“拥有”指针时,即该类在语义上拥有指向的资源并负责其最终释放或销毁。

指针也可以是所谓的“观察”指针,它指向代码的另一部分负责的东西。观察指针类似于引用。

在盲目地在任何地方实施深层复制之前,请记住这一点。

  

如果一个类有必要进行深度复制(operator =重载)   会员矢量? ?

仅当它实际上是指向向量的指针时,如果该指针是拥有指针。

实际情况绝对不是这样。

我假设你真的在谈论一个普通的非指针成员变量:

class Example
{
// ...
    std::vector<int> v;
};

在这种情况下,您根本不需要处理指针。 std::vector自动管理所有内容。

答案 1 :(得分:1)

std::vector可以照顾好自己。你不需要做任何特别的事情。它有自己的赋值运算符,可以进行适当的复制。