みんなのおかげで、プロジェクト全体をもう一度チェックした後、実際の問題は仮想デストラクタの欠落でした....それが原因でメモリリークが発生しました...
#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;
}
メモリリークあり:
int main() { VecContainer *a; while(true) { a = new VecContainer(); delete a; } }
良い (ptr を使用していないため):
int main() { while(true) { VecContainer a; } }