IT이야기

C++11에서 소멸자 뒤에 식별자 재정의

cyworld 2021. 10. 2. 17:52
반응형

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

반응형