以下は、プログラム内の新規/削除演算子のパターンです。 Valgrindは記憶は「間違いなく失われている」と述べています。私は漏れがどこにあるのか分からない。私の新しい/削除演算子の使い方に何か問題がありますか?valgrindでメモリリークを検出できない
class Generic
{
GenericInterface *gInterface; //GenericInterface is abstract class
public:
Generic()
{
gInterface = NULL;
}
~Generic()
{
delete gInterface;
}
void Create()
{
gInterface = new Specific();
}
};
class Specific : public GenericInterface
{
MyClass* _myClass;
public:
Specific()
{
_myClass = new MyClass;
}
~Specific()
{
delete _myClass;
}
};
int main()
{
Generic g;
g.Create();
}
valgrindはメモリが失われていると言っています。
==2639== 8 bytes in 1 blocks are definitely lost in loss record 2 of 45
==2639== at 0x4026351: operator new(unsigned int) (vg_replace_malloc.c:255)
==2639== by 0x804D77C: Specific::Specific() (Specific.cc:13)
==2639== by 0x804DAFC: Generic::Create() (Generic.cc:58)
'Virtual〜GenericInterface()= 0;'を置くと、 '〜GenericInterface()'の未定義参照が'特定の'デストラクタ。 – Meebo
@Meebo:派生クラスのデストラクタが呼び出さなければならないので、純粋ではありません。それを定義する必要があります( 'GenericInterface ::〜GenericInterface(){}')。 –