我读到assign方法在分配任何东西之前清除了向量目标索引。这是否意味着如果我们有一个向量,例如:
vector<foo*> somevector;
那么在将数据复制到目标索引之前,assign 方法实际上会删除 foo*。
那么在将数据复制到目标索引之前,assign 方法实际上会删除 foo*。
不,它只会删除指针本身,但不会删除指针指向的对象。
在 STL 容器中使用原始指针时需要小心。如果你在 中动态分配元素somevector
,你最终会泄漏内存。
更多的实践方法是在 STL 容器中使用智能指针,动态分配的内存将在以下情况下被释放:
std::vector<std::unique_ptr<foo>> somevector;
不 std::vector
,永远不会在存储的指针上调用 delete。它只会破坏对象。对于具有非平凡析构函数的类对象,销毁包括调用该析构函数。在指针或任何其他可简单破坏的对象的情况下,销毁包括什么都不做。
不,包含指向对象的指针的标准容器永远不会在指针上调用 delete - 如果/在必要时,您有责任这样做。这就是为什么存储指针是一个坏主意。