如果我有两个 std::vector 对象,我尝试使用赋值运算符将一个对象复制到另一个:
std::vector
v2 = v1;
它会自动创建 v1 指向的数组的深层副本吗?或者,如果我在我正在编写的另一个类中使用 std::vector ,我是否必须在我想要执行此操作时重载赋值运算符?
v1
C矢量是自动深拷贝 . 但是vector元素不是 . 所以你需要重载元素的operator =,如果它是一个复杂的结构包括指针 .
复制矢量时,您正在制作深层复制 . 但是,如果你有一个指针向量,你只能获得指针的副本,而不是它们指向的值 .
例如:
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
2 回答
C矢量是自动深拷贝 . 但是vector元素不是 . 所以你需要重载元素的operator =,如果它是一个复杂的结构包括指针 .
复制矢量时,您正在制作深层复制 . 但是,如果你有一个指针向量,你只能获得指针的副本,而不是它们指向的值 .
例如: