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

标签 c++ c++11 memory-leaks valgrind smart-pointers

在下面给出 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));
    }


    };

如果我在下面的方法中调用我的 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;
}

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

~Holder(){
  this->objects.clear();
};

我的另一个问题是,我是否仍可以使用“Valgrind 工具集成”版本 3.0.0.201502180018 来查找 c++11 应用程序中的内存泄漏,或者它无法在 c++11 程序中查找内存泄漏?

最佳答案

您不必调用 clear手动。 std::vector<T> 的析构函数将调用 std::unique_ptr<T> 的析构函数自动。

与内置指针相比,智能指针的主要优点是您不必处理手动清理。

关于c++ - 即使 valgrind 没有显示内存泄漏,我是否应该在 c++11 的析构函数中清除 unique_ptr 的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33196202/

相关文章:

python - 将 Qt 嵌入 native 窗口 (Windows)

c++ - 在函数中找到 minExam

c++11 - 为什么 decltype 的行为是这样定义的?

c++ - 如何使 C++ 类生成不可克隆的对象

C++ 对二进制表达式 ('IOperand *' 和 'IOperand *' 的无效操作数)

java - glTexImage2D 导致内存泄漏

c++ - std::abs(std::complex) 太慢

c++ - 打印 boost::graph edge_descriptor

java - 如何检测在 Netbeans 中进行分析时未显示的内存泄漏?

ios - iOS 是否接受任何内存泄漏?