Kan Li
Kan Li

Reputation: 8797

Default pure virtual destructor

In C++11, we are able to declare a destructor to be auto generated:

struct X {
  virtual ~X() = default;
};

Also, we can declare a destructor to be pure virtual:

struct X {
  virtual ~X() = 0;
};

My question is: how to declare the destructor to be both auto generated and pure virtual? Looks like the following syntax is not correct:

struct X {
  virtual ~X() = 0 = default;
};

Neither is this one:

struct X {
  virtual ~X() = 0, default;
};

Nor this one:

struct X {
  virtual ~X() = 0 default;
};

EDIT: Some clarification on the purpose of the question. Basically I want an empty class to be non-instantiable base class, but derived class is instantiable, then the class must have a pure virtual destructor. But on the other hand, I don't want to provide the definition in a .cpp file. So I need some sort of mechanism equivalent to default. I wonder if anyone has an idea to solve the problem.

Upvotes: 49

Views: 10772

Answers (1)

Matthieu M.
Matthieu M.

Reputation: 299810

In order to define a pure virtual method, you need a separate definition from the declaration.

Therefore:

struct X {
    virtual ~X() = 0;
};

X::~X() = default;

Upvotes: 61

Related Questions