当我尝试制作unique_ptr的向量时,我遇到了内存泄漏问题。我试图找到问题所在,我最终得到了这个(无意义的)代码片段(我的代码包含有意义的操作,这里是简单的整数):
class Deleter
{
public:
void operator()(int* ptr)
{
delete ptr;
}
};
和
vector<unique_ptr<int, Deleter>> data;
for (int i = 0; i < 10000; i++)
{
int* temp = NULL;
unique_ptr<int, Deleter> uptr;
uptr = unique_ptr<int, Deleter>(temp);
data.push_back(move(uptr));
uptr.~unique_ptr();
}
data.~vector();
此代码会导致内存泄漏,但我很好奇问题出在哪里,谢谢
答案 0 :(得分:1)
如果您没有在此代码中分配内存,您怎么可能会出现内存泄漏?停止手动调用析构函数,它应该修复泄漏。
注意:即使你指定了Deleter
类型,也没有传递它的实例,只是使用里面的默认构造函数。
#include <memory>
std::vector<std::unique_ptr<int, Deleter>> data;
for (int i = 0; i < 10000; i++)
{
data.push_back(std::unique_ptr<int, Deleter>(new int(i)));
}