C++ deleting inherited class
Let's say there is a class Object and then another class Cat that inherits Object. Next, there is a list of Object* (pointers). Then, I create a 开发者_开发技巧new Cat and put it into the list. After some time I want to delete all Cats and call delete on each member of the list. Does it call destructor of Cat?
Yes if you marked the destructor of object as virtual.
class Object {
public:
virtual ~Object(){} //make the base class destructor virtual
};
class cat : public Object {
public:
virtual ~cat(){} // now this gets called when a pointer to Object that is a cat is destroyed
}
If the destructor of Object is virtual, yes.
What you describe is precisely the situation where virtual destructors come in. Read the C++ FAQ.
Yes, if class Object
(the base class) destructor is declared virtual, otherwise you run into undefined behavior which you don't want.
精彩评论