3

OK, I ran into this today, when the TI TMS470 C++ compiler refused to take it.

This comes from the Silver version of the C++ translation of the "Head First Design Patterns" example code.

class foo { ... protected: virtual ~foo() = 0 {}; // compiler barfs on this line }; 

The compiler refused to accept the combination of "= 0" (pure virtual) and "{}" (I'm guessing that this is to let a derived class throw the destructor up anyway.

What exactly are they trying to do with that line, is it really legal C++, and how critical is it?

1 Answer 1

8

It is not legal C++. Pure virtual function can have a body, but the definition has to be made out-of-class.

In this particular case (the function is a destructor), the function must have a body if the class is used anywhere in the program (i.e. if it is used as a base class somewhere, since this is the only way one can use an abstract class).

The proper way do define the whole thing is as follows

class foo { ... protected: virtual ~foo() = 0; }; inline foo::~foo() { } 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.