删除空向量 unique_ptr
deleting vector of empty unique_ptr
我在尝试制作 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();
这段代码造成了一点内存泄漏,但我很好奇问题出在哪里,谢谢
如果您不在此代码中分配内存,怎么可能会发生内存泄漏?停止手动调用析构函数,它应该可以修复泄漏。
注意:即使你指定了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)));
}
我在尝试制作 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();
这段代码造成了一点内存泄漏,但我很好奇问题出在哪里,谢谢
如果您不在此代码中分配内存,怎么可能会发生内存泄漏?停止手动调用析构函数,它应该可以修复泄漏。
注意:即使你指定了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)));
}