簡體   English   中英

動態分配的std :: vector似乎有內存泄漏

[英]Dynamically allocated std::vector seems to have memory leak

感謝大家,並在整個項目中再次檢查后,真正的問題是缺少虛擬目標...導致內存泄漏......

#include "stdafx.h"
#include <vector>

class VecContainerParent
{
public:
    VecContainerParent(){};

沒有這一行:

    virtual ~VecContainerParent(){};

它會導致內存泄漏

};

class VecContainerChild : public VecContainerParent
{
public:
    VecContainerChild(){};

    //virtual ~VecContainerChild(){};
private:
    std::vector<int> vec;
};

////////// WITH MEMORY LEAK ///////////////


int _tmain(int argc, _TCHAR* argv[])
{
    VecContainerParent *a;
    while(true)
    {
        a = new VecContainerChild();
        delete a;
    }
} 

/////原帖////////// 我在類中使用向量時出現內存泄漏問題,然后將此對象與new&delete一起使用。 似乎類中的向量不釋放內存。 為了測試這個,我在任務管理器中看到過程的內存急劇增加。

請看下面的例子:

class VecContainer
{
public:
       VecContainer(){};
private:
       std::vector<int> vec;
}
  1. 內存泄漏:

     int main() { VecContainer *a; while(true) { a = new VecContainer(); delete a; } } 
  2. 好(因為不使用ptr):

     int main() { while(true) { VecContainer a; } } 

這是典型的。 當你

   a = new VecContainerChild();
    delete a;

通過指向其基類子對象的指針刪除對象, 除非基類具有虛析構函數, 否則調用未定義的行為。 基本上,在這種情況下,孩子的析構函數不會運行。

這可能是一個需要進一步研究的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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