[sigc] sigc::trackable::~trackable() is not virtual



sigc::trackable::~trackable() is not virtual. 

this can lead to problems when using virtual inheritance of a
sigc::trackable, at least with gcc 3.4-4.1. consider this tree:

class A : public virtual sigc::trackable {}
class B : public virtual sigc::trackable {}
class C : public A, public B {}

this leads to a compiler-induced disaster when destroying a C. or at
least it can (i just spent most of a week tracking this down).

why is this destructor not virtual by default? i thought it was widely
accepted good practice that if the class is ever intended to be
inheritable, its destructor should be virtual? 

--p


	




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]