删除空unique_ptr的向量

时间:2018-02-01 23:35:50

标签: c++ c++11 vector memory-leaks 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();

此代码会导致内存泄漏,但我很好奇问题出在哪里,谢谢

1 个答案:

答案 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)));
}

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