首页 文章

std :: vector是否会自动从一个矢量对象到另一个矢量对象的指针的深度副本?

提问于
浏览
0

如果我有两个 std::vector 对象,我尝试使用赋值运算符将一个对象复制到另一个:

v2 = v1;

它会自动创建 v1 指向的数组的深层副本吗?或者,如果我在我正在编写的另一个类中使用 std::vector ,我是否必须在我想要执行此操作时重载赋值运算符?

2 回答

  • 0

    C矢量是自动深拷贝 . 但是vector元素不是 . 所以你需要重载元素的operator =,如果它是一个复杂的结构包括指针 .

  • 5

    复制矢量时,您正在制作深层复制 . 但是,如果你有一个指针向量,你只能获得指针的副本,而不是它们指向的值 .

    例如:

    std::vector<Foo> f;
    std::vector<Foo> cp = f; //deep copy. All Foo copied
    
    std::vector<Foo*> f;
    std::vector<Foo*> cp = f; //deep copy (of pointers), or shallow copy (of objects).
    //All pointers to Foo are copied, but not Foo themselves
    

相关问题