동적으로 생성 된 멤버 변수가 없으므로 소스 코드에 메모리 누수가 없습니다. 'B'가 동적으로 작성되기 때문에, 출력이 될 것이다 이때
#include <iostream>
using namespace std;
class base
{
int a;
public:
base() {a =0;}
~base()
{
cout<<"\nBase Destructor called";
}
};
class derv :public base
{
int *b;
public:
derv() { b = new int;}
~derv()
{
cout<<"\nDerv Destructor called";
delete b;
}
};
int main()
{
base *pb = new derv();
delete pb;
}
메모리 누수가이 경우
Base Destructor called
:
는 케이스 (1) 아래의 변형 예를 생각해 'delete'키워드를 사용하여 삭제해야하는 'new'를 사용합니다. derv 소멸자가 호출되지 않으므로 삭제되지 않으므로 메모리 누수가 발생합니다. 이 호출 DERV 소멸자 leak.because에는 메모리없는 및 B지고 이때 2 출력 될 경우
#include <iostream>
using namespace std;
class base
{
int a;
public:
base() {a =0;}
virtual ~base()
{
cout<<"\nBase Destructor called";
}
};
class derv :public base
{
int *b;
public:
derv() { b = new int;}
~derv()
{
cout<<"\nDerv Destructor called";
delete b;
}
};
int main()
{
base *pb = new derv();
delete pb;
}
,
Derv Destructor called
Base Destructor called
:
는 아래 케이스 (2)를 고려 삭제됨
파생 클래스는 가상 클래스로 정의하여 파생 클래스 객체를 가리키는 기본 클래스 포인터를 삭제할 때 파생 클래스 소멸자가 호출되도록 할 수 있습니다.
파생 클래스가 동적으로 멤버를 만들었 으면 '소멸자가 가상이어야합니다'라고 말할 수 있습니다.
가상 소멸자가 필요한 기본 클래스입니다. – Yuushi
@ 신비로운 : 제임스는 이것을 가지고있다. – Puppy
@James, 당신도 기본 클래스에는 가상 함수가 없지만 기본 클래스를 상속 받기를 원하면 가상 소멸자가 있어야한다고 말했습니까? – Alok