Reputation: 8797
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
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