다음은 내 프로그램의 새/삭제 연산자의 패턴입니다. Valgrind는 기억이 "확실히 없어졌다"고 말합니다. 누수가 어디 있는지 나는 꽤 알 수 없었다. 새로운/delete 연산자의 사용법에 문제가 있습니까?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()'에 대한 Undefined 참조를 얻습니다. 'Specific' 소멸자. – Meebo
@Meebo : 파생 클래스 소멸자가 호출해야하기 때문에 순수하지 않아야합니다. 이를 정의해야합니다 ('GenericInterface :: ~ GenericInterface() {}'). –