【发布时间】:2023-04-10 09:42:02
【问题描述】:
当使用vector保存指向新分配对象的指针时,比如
vector<int*> intP;
for(int i = 0; i < N; ++i){
intP.push_back(new int(i));
}
我知道我们必须释放每个int* 自己指向的所有内容,通常在<algorithm> 中使用for_each。我还知道,当向量的大小增加到其容量时,它将通过分配两倍大小的新空间、将旧空间中的所有内容复制到新空间以及销毁旧空间中的所有内容来重新分配更多空间。但这不会导致内存泄漏,因为没有人删除旧int*指向的内容吗?
【问题讨论】:
-
对,没有泄漏。您可能有兴趣知道您可以使用
std::unique_ptr,这样您就不必在完成后手动删除所有内容。 -
指针被复制,因此新的
int*s 将指向相同的对象。在您真正想从向量中删除它们之前,无需删除它们。话虽如此,你永远不想这样做。你想要一个std::vector<std::unique_ptr<int>>或一个普通的std::vector<int>。 -
手动内存管理是so 90s C++。现在你应该使用智能指针。
-
@super 我刚刚意识到复制正在做需要做的事情..谢谢!