21xrx.com
2025-03-29 18:37:23 Saturday
文章检索 我的文章 写文章
C++中,子类析构函数会自动调用父类的析构函数吗?
2023-07-04 22:21:39 深夜i     20     0
C++ 子类 析构函数 父类 自动调用

在C++中,子类继承了父类的所有成员函数和数据成员。当子类对象被销毁时,其析构函数会被调用。但是,子类的析构函数并不会自动调用父类的析构函数,需要程序员手动调用。

这是因为C++中父类的析构函数并不是虚函数,因此无法在子类中自动调用。如果父类的析构函数是虚函数,则可以通过在子类中声明虚析构函数来自动调用父类的析构函数。

在子类的析构函数中,需要手动调用父类的析构函数来释放父类的资源。通常的做法是在子类的析构函数中调用父类的析构函数,然后释放子类自己的资源。例如:

class Parent {
public:
  Parent() {};
  virtual ~Parent() std::cout << "Parent destructor" << std::endl; ;
};
class Child : public Parent {
public:
  Child() {};
  ~Child()
    std::cout << "Child destructor" << std::endl;
  
};
int main() {
  Parent* obj = new Child();
  delete obj;
  return 0;
}

在上面的代码中,Child继承自Parent,并且Child的析构函数中没有手动调用Parent的析构函数。结果是,程序只输出"Child destructor",而没有输出"Parent destructor"。要解决这个问题,可以修改Child的析构函数:

~Child() {
  std::cout << "Child destructor" << std::endl;
  Parent::~Parent();
}

修改后的代码输出"Child destructor"和"Parent destructor"。

总结来说,C++中子类析构函数不会自动调用父类的析构函数。程序员需要手动调用父类的析构函数来释放资源。如果父类的析构函数是虚函数,可以通过在子类中声明虚析构函数来自动调用父类的析构函数。

  
  

评论区