C++ C++;包含新指针的向量的分配

C++ C++;包含新指针的向量的分配,c++,vector,stl,C++,Vector,Stl,使用vector保存指向新分配对象的指针时,例如 vector<int*> intP; for(int i = 0; i < N; ++i){ intP.push_back(new int(i)); } 向量intP; 对于(int i=0;i代码或一个普通的代码>代码::向量。手动内存管理是如此的C++。这些天你应该使用智能指针。@super我刚刚意识到复制正在做需要做的事情。谢谢!

使用vector保存指向新分配对象的指针时,例如

vector<int*> intP;
for(int i = 0; i < N; ++i){
   intP.push_back(new int(i));
}
向量intP;
对于(int i=0;i

我知道我们必须解除分配每个
int*
自己指向的所有内容,通常在
中为每个
使用
。我还意识到,当向量的大小增加到其容量时,它将重新分配更多的空间,方法是以双倍的大小分配新空间,将旧空间中的所有内容复制到新空间,并销毁旧空间中的所有内容。但是这不会导致内存泄漏吗?因为没有人删除旧的
int*
指向的内容?

让我们首先更好地定义“泄漏”是什么。当您动态分配了无法再访问的浮动内存时,就会发生内存泄漏。

这意味着你没有办法解除分配它,甚至不知道它在哪里!这可能是指针在调用
delete
或其他一些操作之前超出范围的结果

在您的例子中,
std::vector
确实会破坏指向动态内存的指针数组,但在此之前,它会复制所有指针。因此,由于您仍然能够访问动态内存,因此不会出现泄漏



您可能还对哪个将为您执行内存管理感兴趣,这样您就不必担心泄漏了

对,没有泄漏。您可能有兴趣知道,您可以使用
std::unique\u ptr
,这样就不必在完成时手动删除所有内容。指针会被复制,因此新的
int*
s将指向相同的对象。不需要删除它们,直到您真正想要从向量中删除它们。这么说,你永远都不想这么做。您需要一个<代码> STD::向量< />代码或一个普通的代码>代码::向量。手动内存管理是如此的C++。这些天你应该使用智能指针。@super我刚刚意识到复制正在做需要做的事情。谢谢!