[英]Proper way to push_back pointer to a vector
我有一個ERROR: LeakSanitizer: detected memory leaks
由於使用指針向量的類的構造函數而導致的ERROR: LeakSanitizer: detected memory leaks
。
在這里,我只是我的代碼。
問題h
class Problem {
protected:
std::vector<const Object*> pointer_vector;
public:
// Constructor
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
如上所述, ERROR: LeakSanitizer: detected memory leaks
。
我想我在push_back
做錯了,我在問這樣做的正確方法。
問題是我想問一些一般的方法來解決這個問題。 喜歡
如何使用raw pointer
改進此代碼。
因為我認為我們肯定有解決此問題的絕妙方法,但沒有發現可能的重復項。 如果您需要詳細的錯誤報告,我將添加它們。
謝謝!
不要想太多。
您對象中擁有的所有內容似乎都在那里分配了,因此請使用智能指針:
std::vector<std::unique_ptr<Object>> pointer_vector;
您用new
創建的每個對象都必須在某個時候delete
。 這樣做是您的責任。 在您的情況下,最簡單的解決方案是將其添加到Problem
類的析構函數中。
Problem::~Problem() {
for (auto ptr : pointer_vector)
delete ptr;
}
如果從矢量中刪除了對象,則必須確保也將其delete
。
請注意:正確的方法是使用智能指針,正如Matthieu在其答案中已經說過的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.