将向量的push_back指针正确的方法

时间:2018-11-25 16:12:53

标签: c++ pointers memory-leaks

由于使用指针向量的类的构造函数,我有一个ERROR: LeakSanitizer: detected memory leaks

这里我只是我的代码。


问题。h

class Problem {
 protected:
    std::vector<const Object*> pointer_vector;

 public:
    // Constructor
    Problem();
};

Problem.cc

Problem::Problem() {
    this->pointer_vector.push_back(new Object(parameter_list_1));
    this->pointer_vector.push_back(new Object(parameter_list_2));
    // here I just want to push back the pointer into the vector
}

由于我的代码仍然有效。但是我提到了ERROR: LeakSanitizer: detected memory leaks

我认为push_back做错了,我在问这样做的正确方法。
问题是我想问一些解决问题的一般方法。喜欢
    如何使用raw pointer改进此代码。

因为我认为我们肯定有解决此问题的绝妙方法,但没有找到可能的重复项。如果您需要详细的错误报告,我会添加它们。

谢谢!

2 个答案:

答案 0 :(得分:6)

不要想太多。

似乎您的对象中拥有的所有东西都分配在那里,因此请使用智能指针:

std::vector<std::unique_ptr<Object>> pointer_vector;

答案 1 :(得分:3)

使用new创建的每个对象都必须在某个时候进行delete处理。这样做是您的责任。对于您而言,最简单的解决方案是将其添加到Problem类的析构函数中。

Problem::~Problem() {
    for (auto ptr : pointer_vector)
        delete ptr;
}

如果您曾经从向量中删除对象,则必须确保它们也delete被放置在那里。

请注意:正确的方法是使用智能指针,正如Matthieu在其回答中已经说过的那样。