我有一点问题,我正在使用_CrtDumpMemoryLeaks();
,我看到很多内存泄漏。我认为以下代码
for (int i = 0; i < vect.size(); i++)
delete vect[i];
vect.clear();
会删除我想要的所有内容,我做错了什么?
PS:
vector<Osoba *> osoby;
答案 0 :(得分:7)
发布的代码将正确删除向量中的所有对象。但是,我确信您的代码中还有其他路径,它们不会删除对象,而只是销毁向量。
要确保不会发生这种情况,请将对象(而不是指针)放入向量(通常是首选方法),或者,如果您需要拥有指针语义,请使用std::unique_ptr
或std::shared_ptr
(按此顺序排列)。
答案 1 :(得分:0)
使用您的代码删除您创建的所有矢量。使用向量存储指针时,必须删除已创建的所有新对象(一个删除一个新对象)。一种更简单的方法是使用像其他答案中建议的引用计数,如shared_ptr ......
即使可能不是你的情况,你的代码也是正确的,除非你的vector包含指向数组的指针:在这种情况下,你必须用delete [] vect [i]替换;
此致