内存泄漏指针的C ++向量

时间:2016-01-26 14:19:44

标签: c++ memory-leaks

我有一点问题,我正在使用_CrtDumpMemoryLeaks();,我看到很多内存泄漏。我认为以下代码

for (int i = 0; i < vect.size(); i++)
  delete vect[i];
vect.clear();

会删除我想要的所有内容,我做错了什么?

PS:

vector<Osoba *> osoby;

2 个答案:

答案 0 :(得分:7)

发布的代码将正确删除向量中的所有对象。但是,我确信您的代码中还有其他路径,它们不会删除对象,而只是销毁向量。

要确保不会发生这种情况,请将对象(而不是指针)放入向量(通常是首选方法),或者,如果您需要拥有指针语义,请使用std::unique_ptrstd::shared_ptr (按此顺序排列)。

答案 1 :(得分:0)

使用您的代码删除您创建的所有矢量。使用向量存储指针时,必须删除已创建的所有新对象(一个删除一个新对象)。一种更简单的方法是使用像其他答案中建议的引用计数,如shared_ptr ......

即使可能不是你的情况,你的代码也是正确的,除非你的vector包含指向数组的指针:在这种情况下,你必须用delete [] vect [i]替换;

此致