我读到assign方法在向它分配任何内容之前清除了向量目标索引。这意味着如果我们有一个向量,例如:
vector<foo*> somevector;
然后在将数据复制到目标索引之前,assign方法实际上会删除foo *。
答案 0 :(得分:3)
然后在将数据复制到目标索引之前,assign方法实际上会删除foo *。
不,它只会删除指针本身,但不会删除指向指针的对象。
在STL容器中使用原始指针时需要小心。如果在somevector
中动态分配元素,则会导致内存泄漏。
更多练习方法是在STL容器中使用智能指针,动态分配的内存将在以下情况下解除分配:
std::vector<std::unique_ptr<foo>> somevector;
答案 1 :(得分:2)
没有。 std::vector
永远不会在存储的指针上调用delete。它只会破坏对象。对于具有非平凡析构函数的类对象,销毁包括调用析构函数。在指针或任何其他简单的可破坏对象的情况下,破坏包括无所事事。
答案 2 :(得分:1)
不,包含指向对象指针的标准容器永远不会在指针上调用delete - 如果/在必要时,您负责执行此操作。这就是为什么存储指针是一个坏主意。