我应该在c ++ 11中清除析构函数中的unique_ptr向量,即使valgrind没有显示内存泄漏

Gov*_*van 2 c++ valgrind memory-leaks smart-pointers c++11

Holder下面的课程:

    class Holder {
        string  name;
        std::vector<std::unique_ptr<Object>> objects;
    public:
        Holder(string name): name(name){
        }   

        ~Holder(){};
        Holder & operator=(const Holder & holder) = delete;  

    vector<unique_ptr<Object>> const& Holder::getContent()const{
        return this->objects;
    }

    void Holder::add(unique_ptr<Object> objPtr){
       this->objects.push_back(move(objPtr));
    }


    };
Run Code Online (Sandbox Code Playgroud)

如果我在下面的方法中调用我的Holder对象:

void HolderTest::addObject(){
    Holder *holder = new Holder("bag");
    holder->add(unique_ptr<Object>(new Object("test")));
    vector<unique_ptr<Object>> const& objects = holder->getContent();
    const std::string name = objects[0].get()->name();
    CPPUNIT_ASSERT_EQUAL((string)"test", name);
    delete holder;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:我应该在Holder析构函数中调用unique_ptr的clear方法向量来避免内存泄漏,如下所示?

~Holder(){
  this->objects.clear();
};
Run Code Online (Sandbox Code Playgroud)

我的另一个问题是,我仍然可以使用"Valgrind Tools Integration"3.0.0.201502180018版来查找c ++ 11应用程序中的内存泄漏,或者它无法在c ++ 11程序中找到内存泄漏吗?

das*_*ght 5

您不必clear手动呼叫.析构函数std::vector<T>std::unique_ptr<T>自动调用析构函数.

智能指针优于内置指针的主要优点是您不必处理手动清理.