矢量插入和赋值之间的差异

时间:2013-10-05 01:38:58

标签: c++ pointers vector

我读到assign方法在向它分配任何内容之前清除了向量目标索引。这意味着如果我们有一个向量,例如:

vector<foo*> somevector;

然后在将数据复制到目标索引之前,assign方法实际上会删除foo *。

3 个答案:

答案 0 :(得分:3)

  

然后在将数据复制到目标索引之前,assign方法实际上会删除foo *。

不,它只会删除指针本身,但不会删除指向指针的对象。

在STL容器中使用原始指针时需要小心。如果在somevector中动态分配元素,则会导致内存泄漏。

更多练习方法是在STL容器中使用智能指针,动态分配的内存将在以下情况下解除分配:

std::vector<std::unique_ptr<foo>> somevector;

答案 1 :(得分:2)

没有。 std::vector永远不会在存储的指针上调用delete。它只会破坏对象。对于具有非平凡析构函数的类对象,销毁包括调用析构函数。在指针或任何其他简单的可破坏对象的情况下,破坏包括无所事事。

答案 2 :(得分:1)

不,包含指向对象指针的标准容器永远不会在指针上调用delete - 如果/在必要时,您负责执行此操作。这就是为什么存储指针是一个坏主意。