C의 순수 가상 소멸자
객체 지향 프로그래밍의 세계에서 추상 기본 클래스에는 순수 가상 소멸자가 필요한 경우가 많습니다. 그러나 다음과 같은 코드를 작성할 때 우려되는 점이 있습니다.
class A { public: virtual ~A() = 0; };
이는 추상 기본 클래스가 순수 가상 소멸자를 갖는 것이 허용되는지에 대한 의문을 제기합니다. Microsoft Visual C가 문제 없이 컴파일하는 동안 런타임에는 어떤 일이 발생합니까?
답은 정의되지 않은 동작입니다. A에서 파생된 클래스의 인스턴스가 삭제되거나 소멸되면 A의 소멸자가 호출됩니다. 그러나 이는 순전히 가상이고 구현이 부족하므로 정의되지 않은 동작이 발생합니다. 특정 플랫폼에서는 이로 인해 purecall 핸들러가 호출되어 충돌이 발생할 수 있습니다.
이를 방지하려면 소멸자를 구현하는 것도 중요합니다. 다음과 같은 최소한의 구현으로 충분합니다.
class A { public: virtual ~A() = 0; }; inline A::~A() { }
이렇게 하면 파생 클래스의 인스턴스가 삭제될 때 A의 소멸자가 정의되지 않은 동작을 일으키지 않습니다.
위 내용은 C의 추상 기본 클래스에는 순수 가상 소멸자가 있어야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!