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 ...


Reply via email to