开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜