簡體   English   中英

將向量的push_back指針正確的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM