为什么C++对象有一个默认的析构函数? [英] Why do C++ objects have a default destructor?

查看:80
本文介绍了为什么C++对象有一个默认的析构函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

例如,当我没有声明构造函数时,编译器将为我提供一个没有参数和定义(空体)的默认构造函数,因此不会采取任何操作

那么,例如,如果我完成了一个对象,默认的析构函数不会重新分配(释放)该对象使用的内存吗?如果它没有,为什么我们会得到它?

而且,可能同样的问题也适用于默认构造函数。如果它什么也不做,为什么默认情况下会为我们创建它?

推荐答案

说编译器生成的默认构造函数不执行任何操作是错误的。它相当于一个具有空主体和空初始化器列表的用户定义构造函数,但这并不意味着它不执行任何操作。以下是它的功能:

  1. 它调用基类的默认构造函数。
  2. 如果类是多态的,则它初始化vtable指针。
  3. 它调用所有成员的默认构造函数。如果某个成员具有一些构造函数,但没有默认构造函数,则这是编译时错误。

只有当类不是多态的,没有基类,也没有需要构造的成员时,编译器生成的默认构造函数才不执行任何操作。但即便如此,出于其他答案中解释的原因,默认构造函数有时也是必要的。

析构函数也是如此-它调用基类的析构函数和所有拥有它们的成员的析构函数,所以在一般情况下,编译器生成的析构函数不做任何事情是不正确的。

但内存分配实际上与此无关。内存是在调用构造函数之前分配的,并且只有在最后一个析构函数完成之后才会释放。

这篇关于为什么C++对象有一个默认的析构函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆