GNU GCC(g ): 왜 여러 소멸자를 생성합니까?
컴파일된 C 프로그램의 기호 테이블을 검사할 때 다음과 같은 문제가 발생할 수 있습니다. 동일한 클래스에 대해 생성된 여러 소멸자(dtors)를 관찰합니다. 단위 테스트에서 포괄적인 코드 적용 범위를 달성하려면 이 현상을 이해하는 것이 중요합니다.
여러 소멸자가 필요한 이유:
GCC 컴파일러는 다음과 같은 이유로 여러 소멸자를 생성합니다.
소멸자 유형:
GCC는 세 가지 유형의 dtor를 생성합니다.
소멸자 사용 방법:
일반적으로 연산자 삭제 함수는 삭제되는 개체 유형에 따라 올바른 dtor를 호출합니다. 그러나 전체 적용 범위를 보장하기 위해 테스트 중에 특정 dtor를 명시적으로 호출할 수 있습니다.
예:
다음 코드는 BaseClass 및 DerivedClass에 대해 생성된 여러 dtor를 보여줍니다.
<code class="cpp">class BaseClass { public: ~BaseClass(); void someMethod(); }; class DerivedClass : public BaseClass { public: virtual ~DerivedClass(); virtual void someMethod(); };</code>
GCC(g)로 컴파일하면 nm 명령에서 볼 수 있듯이 DerivedClass에 대한 3개의 dtor와 BaseClass에 대한 2개의 dtor를 확인할 수 있습니다.
결론:
여러 dtor 생성은 가상 상속 및 최적화를 포함한 다양한 시나리오를 처리하기 위한 GCC의 기능입니다. 단위 테스트에서 100% 기능 적용 범위를 달성하려면 이러한 dtor의 목적과 사용법을 이해하는 것이 필수적입니다.
위 내용은 GCC(g)가 동일한 클래스에 대해 여러 소멸자를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!