Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
484 views
Welcome To Ask or Share your Answers For Others

1 Answer

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;

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share

548k questions

547k answers

4 comments

86.3k users

...