반응형
C++11에서 소멸자 뒤에 식별자 재정의
가상 소멸자 선언 후 재정의 식별자에 특별한 의미가 있습니까?
class Base
{
public:
virtual ~Base()
{}
virtual int Method() const
{}
};
class Derived : public Base
{
public:
virtual ~Derived() override
{}
virtual int Method() override // error: marked override, but does not override - missing const
{}
};
가상 메서드에 재정의 식별자를 사용하는 것은 검사로 유용합니다. 기본 가상 메서드가 실제로 재정의되지 않으면 컴파일러에서 오류를 보고합니다.
가상 소멸자에 대한 재정의에도 의미/기능이 있습니까?
그것은 아닌 override
특별한 의미를 가지고 있지만, 소멸자 자체 :
10.3 가상 기능
6/소멸자가 상속되지 않더라도 파생 클래스의 소멸자는 가상으로 선언된 기본 클래스 소멸자를 재정의합니다. 12.4 및 12.5를 참조하십시오.
이것을 이전 절과 함께 취하면:
5/가상 함수가 virt 지정자 재정의로 표시되고 기본 클래스의 멤버 함수를 재정의하지 않으면 프로그램이 잘못된 형식입니다. [ 예시:
struct B { virtual void f(int); }; struct D : B { void f(long) override; // error: wrong signature overriding B::f void f(int) override; // OK };
—끝 예 ]
you can see that if a destructor is marked override
but the base class does not have a virtual
destructor, the program is ill-formed.
Yes. If the base destructor is not virtual then the override
marking will cause the program to not compile:
class Base
{
public:
~Base()
{}
};
class Derived : public Base
{
public:
virtual ~Derived() override //error: '~Derived' marked 'override' but does
// not override any member functions
{}
};
ReferenceURL : https://stackoverflow.com/questions/17923370/override-identifier-after-destructor-in-c11
반응형
'IT이야기' 카테고리의 다른 글
Fortify 소프트웨어는 작동 방법 (0) | 2021.10.02 |
---|---|
트위터 부트스트랩 드롭다운 메뉴의 z-색인 문제 (0) | 2021.10.02 |
multiprocessing.Process를 사용하여 최대 동시 프로세스 수 (0) | 2021.10.02 |
Stateless 위젯 클래스의 키 (0) | 2021.10.02 |
자바 서블릿 단위 테스트 (0) | 2021.10.02 |