1

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

vector<foo*> somevector;

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

4

3 回答 3

3

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

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

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

更多的实践方法是在 STL 容器中使用智能指针,动态分配的内存将在以下情况下被释放:

std::vector<std::unique_ptr<foo>> somevector;
于 2013-10-05T01:41:44.020 回答
2

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

于 2013-10-05T01:42:00.300 回答
1

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

于 2013-10-05T01:41:37.207 回答