父类析构函数是非虚的,子类析构函数是虚的
时间: 2023-05-28 15:05:34 浏览: 257
这种情况下,当调用父类指针删除子类对象时,只会调用父类的析构函数,而不会调用子类的析构函数。这可能会导致子类中动态分配的资源无法正确释放,从而引发内存泄漏等问题。因此,建议父类析构函数也声明为虚函数,以确保正确的析构顺序和资源释放。
相关问题
父类析构函数是非虚的,子类析构函数是虚的,delete子类指针,会调用父类析构函数
而不会调用子类析构函数。这是因为在编译时,delete操作符只知道指针的类型,而不知道指针所指向的对象的真实类型。因此,它只能调用指针类型的析构函数,即父类的析构函数。如果想要调用子类的析构函数,必须将父类的析构函数声明为虚函数。这样,当删除子类指针时,就会先调用子类的析构函数,再调用父类的析构函数,确保对象的所有资源都被正确地释放。
父类析构函数是非虚的,子类析构函数是虚的,delete子类指针,会调用父类析构函数正确吗
正确的。当使用delete删除一个子类指针时,会先调用子类的析构函数,然后再调用父类的析构函数。虽然父类的析构函数是非虚的,但它会被正确地调用。因为子类的析构函数是虚的,所以在删除子类对象时,会先调用子类的析构函数,然后再调用父类的析构函数,这是C++的规定。
阅读全文