C ++删除继承的类

时间:2011-06-07 13:40:04

标签: c++ inheritance destructor

假设有一个类 Object ,然后是另一个继承 Object 的类 Cat 。接下来,有一个 Object *(指针)列表。然后,我创建一个新的 Cat 并将其放入列表中。一段时间后,我想删除所有 Cats 并在列表的每个成员上调用 delete 。它是否称为 Cat 的析构函数?

4 个答案:

答案 0 :(得分:19)

如果您将对象的析构函数标记为虚拟,则为是。

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
}

答案 1 :(得分:7)

如果Object的析构函数是虚拟的,是的。

答案 2 :(得分:3)

您所描述的正是虚拟析构函数进入的情况。阅读​​C ++ FAQ

答案 3 :(得分:0)

是的,如果将class Object(基类)析构函数声明为虚拟,否则会遇到您不想要的未定义行为。