Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 가상 소멸자를 언제 사용합니까?


Effective C++의 Scott Meyers는 다음과 같이 말합니다.

클래스에 가상 기능이 있는 경우 가상 소멸자가 있어야 하며 기본 클래스로 설계되지 않았거나 다형성으로 사용하도록 설계되지 않은 클래스는 가상 소멸자를 선언해서는 안 됩니다.

따라서 다형성 기본 클래스에서 소멸자를 가상으로 선언해야 합니다. 파생 생성자를 사용하여 기본 클래스의 개체를 생성하는 경우 -

Base *b = new Derived();
// use b
delete b;

Base의 소멸자가 가상이 아닌 경우 이 경우 delete b는 정의되지 않은 동작을 합니다. 소멸자에 대한 호출은 비가상 코드처럼 해결됩니다. 따라서 기본 클래스의 소멸자가 호출되지만 파생 클래스의 소멸자는 호출되지 않으므로 리소스 누수가 발생합니다.