호기심에서 벗어난 나는 컴파일러가 나에게 스택 오버 플로우로 끝나는 무한 루프를 호출하는 대신 경고를 주는지 또는 아래에있는 예제와 같은 것을 시도했다. 아마도 정상적인 함수 나 메서드를 호출하는 것과는 다른 동작이있을 것이라고 생각했습니다. 하지만 그렇지 않습니다. 거기에 대한 특별한 설명이 있습니까 아니면 난 그냥 명시 적으로 this
연산자를 사용하여 기본 클래스 소멸자를 호출 오전 이후 정상적인 함수 호출로 처리됩니다?컴파일러는 파생 된 소멸자에서 기본 클래스 소멸자 호출을 어떻게 처리합니까?
예 :
class A {
virtual ~A();
};
class B : A {
virtual ~B() { this->~A(); }
};
'virtual void ~ A();'- 이것은 컴파일해서는 안되며, 소멸자는 아무 것도 반환하지 않으며 일반적인 메소드 이름에는 tilda를 포함 할 수 없습니다. – yeputons
@yeputons right, sry, typo –
'~ A()'를 두 번 호출하여 정의되지 않은 동작이 발생합니다 ('B()'의 시체가 끝나면 암시 된 호출이 있기 때문에) –