删除空向量 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)));
}

示例:https://wandbox.org/permlink/Kg4XfhwkwxSILwq3