21xrx.com
2024-11-05 17:32:00 Tuesday
登录
文章检索 我的文章 写文章
C++中,子类析构函数会自动调用父类的析构函数吗?
2023-07-04 22:21:39 深夜i     --     --
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++中子类析构函数不会自动调用父类的析构函数。程序员需要手动调用父类的析构函数来释放资源。如果父类的析构函数是虚函数,可以通过在子类中声明虚析构函数来自动调用父类的析构函数。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复