Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!usc!ucsd!ucsdhub!hp-sdd!hplabs!hpfcso!hpfcbig!jenings From: jenings@hpfcbig.SDE.HP.COM (Byron T. Jenings Jr.) Newsgroups: comp.lang.c++ Subject: Bugs in pure virtual functions? Message-ID: <7180011@hpfcbig.SDE.HP.COM> Date: 2 Dec 89 02:24:17 GMT Organization: HP SESD, Fort Collins, CO Lines: 51 I am building a class hierarchy where each class item needs to have a virtual destructor. This is because I want to be able to free a tree of these object by calling delete on a pointer to the abstract class. Here's a fragment of the code: class Expression { public: virtual ~Expression() = 0; virtual void print() = 0; virtual int value() = 0; }; class Or : public Expression { Expression *left, *right; public: Or(Expression *, Expression *); ~Or(); void print(); int value(); }; etc... The problem is, C++ 2.0 requires me to actually define an implementation for the destructor ~Expression, even though it is a pure virtual function. This is because it is implicitly called by the constructors of the derived classes. This seems like a bug to me, since the whole idea of pure virtual funtions [I thought] was that they had no definition. ----- Another problem with this same example. C++ 2.0 generates the following warning: "Expression.h", line 14: warning: Expression has Expression::~Expression() but no constructor This doesn't seem appropriate since the destructor is a pure virtual constructor, and there's no such thing as a pure virtual constructor. The compiler is basically forcing me to define a dummy constructor in my abstract class, which isn't supposed to have any executable code associated with it in the first place. Byron Jenings (HP4000/UX) Phone (303)229-6080 Software Engineering Systems Division, Mailstop #7 Hewlett-Packard Co., Ft. Collins CO 80525-9599