首页 文章

默认分配运算符适用于矢量?

提问于
浏览
0

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

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

2 回答

  • 1

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

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

    指针也可以是所谓的“观察”指针,其指向代码的另一部分负责的事物 . 观察指针类似于引用 .

    在盲目地在任何地方实施深拷贝之前,请记住这一点 .

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

    只有它实际上是一个指向向量的指针,并且该指针是一个拥有指针 .

    实际上应该永远不会这样 .

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

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

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

  • 2

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

相关问题