假设有一个类 Object ,然后是另一个继承 Object 的类 Cat 。接下来,有一个 Object *(指针)列表。然后,我创建一个新的 Cat 并将其放入列表中。一段时间后,我想删除所有 Cats 并在列表的每个成员上调用 delete 。它是否称为 Cat 的析构函数?
答案 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
(基类)析构函数声明为虚拟,否则会遇到您不想要的未定义行为。