Question w.r.t. `'class Foo' has virtual functions but non-virtualdestructor` warning.

Joe Buck Joe.Buck@synopsys.COM
Sat Mar 5 04:49:00 GMT 2005


On Fri, Mar 04, 2005 at 08:06:27PM -0600, Chris Lattner wrote:
> In my mind, the times you want to silence the warning (without defining 
> the virtual dtor) are when you *know* that it will never be used that way, 
> because it's part of the contract of the class.

In my view, if a class defines virtual functions, then this implies
that the class is intended to be derived from, so a non-virtual
destructor is asking for trouble and should be warned about, even
if there is no "delete".

If it has no virtual functions, then (since C++ has no "final" keyword),
the lack of a virtual destructor should not trigger a warning even
if the object is deleted.

> >I could agree that there should be no warning if the class declares a 
> >private operator delete.  But, that kind of thing is a refinement.
> 
> I think this would be a great refinement (if you extended it to protected 
> dtors also).

Nope.  If there's a protected destructor, then that means that it will
form only *part* of the destructor of the derived class, so it's still
an error if a pointer to Base can delete a Derived.  Solving the points-to
problem exactly is undecidable, so ...




More information about the Gcc mailing list