Okay, so for clarification purposes, suppose I have the following:
base (pure virtual)
^
|
|
poly derived1
^
|
|
derived2
and base, derived1, derived2 do not contain anything that needs to be
specially allocated, deallocated. Then I do something like:
base* p = new derived2;
then I do:
delete p;
then only base's destructor will be called... correct? But that's okay,
since stuff inside derived1 and derived2 (such as vector<>, list<>, etc)
should take care of themselves? Or is it necessary to define the destructor
explicitly, and call
vector<>.clear() for vectors, lists... etc? It seems extrememly tedious to
go throught the inheritance hierarchy and clearing objects that shouldn't
have to be cleared. Any suggestions? Maybe I'm just confusing myself.
jj
"Rolf Magnus" <ra******@t-online.de> wrote in message
news:bh*************@news.t-online.com...
Jimmy Johns wrote:
Hi all, I have some class hierarchy as follows:
class S {};
class A {};
class B {public: vector<S*> v_; virtual ~B();};
class C : public virtual A, public virtual B { // do I need to define
virtual ~C() so that B can be properly destructed?};
That depends. If it's possible that you destroy a C through a pointer to
one of its base classes, you need a virtual destructor, but you will
need that in the base class.
in fact, I don't even know if a destructor in C is even needed if I
don't do any memory allocation?
If you don't need a destructor, don't define one, except if you're in a
base class that is supposed to be used polymorphically, becase then
there is a chance that a derived object is deleted through a pointer to
base, so you'll need a virtual destructor in that base.