Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Default pure virtual destructor

Tags:

c++

c++11

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.

like image 225
Kan Li Avatar asked Jul 15 '12 18:07

Kan Li


People also ask

Are destructors virtual by default?

The destructor is not user-provided (meaning, it is implicitly-defined or defaulted) The destructor is not virtual (that is, the base class destructor is not virtual) All direct base classes have trivial destructors. All non-static data members of class type (or array of class type) have trivial destructors.

Is there a default destructor in C++?

The default destructor calls the destructors of the base class and members of the derived class. The destructors of base classes and members are called in the reverse order of the completion of their constructor: The destructor for a class object is called before destructors for members and bases are called.

What is a pure virtual destructor?

A pure virtual destructor can be declared in C++. After a destructor has been created as a pure virtual object(instance of a class), where the destructor body is provided. This is due to the fact that destructors will not be overridden in derived classes, but will instead be called in reverse order.

What is a virtual destructor C++?

A virtual destructor is used to free up the memory space allocated by the derived class object or instance while deleting instances of the derived class using a base class pointer object.


1 Answers

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; 
like image 87
Matthieu M. Avatar answered Sep 20 '22 15:09

Matthieu M.