경고 C26436
가상 함수가 있는 'symbol' 형식에는 공용 가상 또는 보호된 비 가상 소멸자(c.35)가 필요합니다.
C++ 핵심 지침: C.35: 기본 클래스 소멸자가 공용 및 가상이거나 보호되고 비이상이어야 합니다.
클래스가 가상 함수를 정의하는 경우 파생 클래스가 리소스 관리 및 소멸 논리를 포함하여 동작을 변경할 수 있음을 의미하는 다형식이 됩니다. 클라이언트 코드는 기본 클래스에 대한 포인터를 통해 다형 형식을 호출할 수 있으므로 클라이언트가 다운캐스트 없이 적절한 동작을 명시적으로 선택할 수 있는 방법은 없습니다. 리소스가 일관되게 관리되고 실제 형식의 규칙에 따라 소멸이 발생하도록 하려면 공용 가상 소멸자를 정의해야 합니다. 형식 계층 구조가 개체를 직접 삭제하는 클라이언트 코드를 허용하지 않도록 설계된 경우 소멸자는 보호된 가상이 아닌 것으로 정의되어야 합니다.
설명
경고는 형식당 한 번씩 형식의 첫 번째 가상 함수 정의(공용이 아닌 경우 가상 소멸자가 될 수 있음)에 표시됩니다.
정의는 선언과 별도로 배치할 수 있으므로 항상 가상 지정자가 있는 것은 아닙니다. 그러나 경고는 여전히 유효합니다. 함수의 실제 '가상성'을 검사.
코드 분석 이름: NEED_VIRTUAL_DTOR
예시
namespace no_destructor
{
struct base {
virtual void foo() {} // C26436, see remarks to understand the placement of the warning.
};
}
기본 클래스에 가상 공용 소멸자 또는 보호된 비 가상 소멸자가 있는 경우 경고가 나타나지 않습니다.
namespace virtual_destructor
{
struct base {
virtual ~base();
virtual void foo() {}
};
}
namespace protected_destructor
{
struct base {
virtual void foo() {}
protected:
~base() {}
};
}
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기