【问题标题】:Default Assignment Operator is Good For Vector?默认赋值运算符对向量有用吗?
【发布时间】:2018-04-10 00:46:51
【问题描述】:

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

那么,如果类有成员向量,是否有必要进行深拷贝(通过重载operator=)?

【问题讨论】:

  • 关于术语的注释:您不要重载赋值运算符。重载还有另一个含义。您在这里所做的是定义自己的赋值运算符版本,而不是依赖于编译器自动生成的默认版本。

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


【解决方案1】:

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

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

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

在到处盲目实施深拷贝之前,请记住这一点。

如果一个类具有 成员向量? ?

仅当它实际上是一个指向向量的指针并且如果该指针是一个拥有指针。

这实际上不应该是这样的。

我假设您实际上是在谈论一个普通的非指针成员变量:

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

在这种情况下,您根本不必处理指针。 std::vector 自动管理一切。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 非常感谢。对数组也有效吗?
    • @tarktark - 它有助于read the manual(寻找operator=
    猜你喜欢
    • 2013-08-09
    • 1970-01-01
    • 2012-11-26
    • 2015-02-25
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多