
AMDG Patrick Horgan wrote:
Steven Watanabe wrote:
FWIW, non-virtual destructors are the norm in Boost. I strongly dislike the idea of having a policy enabling virtual destructors. Steven, could you tell me the reason for this?
There aren't a lot of virtual function in Boost either. In ggl, the only virtual functions I see are in exception classes.
I have always thought that if you had virtual methods, you should have a virtual destructor since the derived class has something different about it and if being destructed via a reference or pointer to base, the wrong thing could happen without a virtual destructor! Educate me please. I've never heard of any reason to avoid a virtual destructor if you already had virtual methods. Obviously I'm missing something about something I thought I understood.
I don't think so. If you're using virtual functions in the normal OO way, a virtual destructor almost always makes sense. (The use of virtual in Boost.Exception is somewhat different. virtual is being used as an implementation detail to separate a fragment of the interface of a concrete type from the rest of the type in order to minimize dependencies. It isn't being used for polymorphism at all) In Christ, Steven Watanabe