父类析构函数是非虚的,子类析构函数是虚的,delete子类指针,会调用父类析构函数正确吗
时间: 2023-05-28 15:05:36 浏览: 110
正确的。当使用delete删除一个子类指针时,会先调用子类的析构函数,然后再调用父类的析构函数。虽然父类的析构函数是非虚的,但它会被正确地调用。因为子类的析构函数是虚的,所以在删除子类对象时,会先调用子类的析构函数,然后再调用父类的析构函数,这是C++的规定。
相关问题
父类析构函数是非虚的,子类析构函数是虚的,delete子类指针,会调用父类析构函数
而不会调用子类析构函数。这是因为在编译时,delete操作符只知道指针的类型,而不知道指针所指向的对象的真实类型。因此,它只能调用指针类型的析构函数,即父类的析构函数。如果想要调用子类的析构函数,必须将父类的析构函数声明为虚函数。这样,当删除子类指针时,就会先调用子类的析构函数,再调用父类的析构函数,确保对象的所有资源都被正确地释放。
析构函数不会被继承但用父类指针指向子类对象是,删除子对象为什么会掉父类的析构函数
当使用父类指针指向子类对象时,如果使用 delete 关键字删除这个指针,会自动调用父类的析构函数,但这并不是因为父类的析构函数被继承了,而是因为在这种情况下,delete 操作符会先调用子类的析构函数,然后再调用父类的析构函数。
这是因为在 C++ 中,派生类的析构函数会自动调用它的基类的析构函数,因此当子类对象被删除时,父类的析构函数也会被自动调用。但是,这并不是继承的结果,而是由于派生类在定义时自动包含了基类的成分,因此在销毁派生类对象时,需要同时销毁基类对象,而这就需要调用基类的析构函数。
因此,无论是使用父类指针指向子类对象,还是直接使用子类对象,删除时都会自动调用子类和父类的析构函数。
阅读全文