由于使用指针向量的类的构造函数,我有一个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
改进此代码。
因为我认为我们肯定有解决此问题的绝妙方法,但没有找到可能的重复项。如果您需要详细的错误报告,我会添加它们。
谢谢!
答案 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在其回答中已经说过的那样。