Pure virtual destructor in C++

后端 未结 2 1414
遥遥无期
遥遥无期 2020-11-22 13:21

Is it wrong to write:

class A {
public:
    virtual ~A() = 0;
};

for an abstract base class?

At least that compiles in MSVC... Will

2条回答
  •  再見小時候
    2020-11-22 13:26

    Yes. You also need to implement the destructor:

    class A {
    public:
        virtual ~A() = 0;
    };
    
    inline A::~A() { }
    

    should suffice.

    And since this got a down vote, I should clarify: If you derive anything from A and then try to delete or destroy it, A's destructor will eventually be called. Since it is pure and doesn't have an implementation, undefined behavior will ensue. On one popular platform, that will invoke the purecall handler and crash.

    Edit: fixing the declaration to be more conformant, compiled with http://www.comeaucomputing.com/tryitout/

提交回复
热议问题