C默认析构函数

当我不声明一个构造函数为例,编译器将提供一个默认的构造函数,没有参数和没有定义(body),因此,将不采取任何行动。

如果我现在不声明一个析构函数,编译器会提供一个默认析构函数没有定义(body),因此,我认为没有动作。

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

并且,也许同样的问题适用于默认构造函数。如果它没有什么,为什么它为我们默认创建?

谢谢。

这是错误的说,编译器生成的默认构造函数不采取行动。它等价于一个用户定义的构造函数,它具有一个空主体和一个空的初始化器列表,但这并不意味着它不需要操作。这是它的作用:

>它调用基类的默认构造函数。
>如果类是多态的,它将初始化vtable指针。
>它调用具有它们的所有成员的默认构造函数。如果有一个成员有一些构造函数,但没有默认的,那么它是一个编译时错误。

并且只有一个类不是多态的,没有基类,没有需要构造的成员,那么编译器生成的默认构造函数什么都不做。但即使如此,默认构造函数有时是必要的,因为在其他答案中解释的原因。

析构函数也是如此,它调用了基类的析构函数和所有具有它们的成员的析构函数,所以在一般情况下编译器生成的析构函数不起作用。

但内存分配确实与这无关。内存在调用构造函数之前分配,只有最后一个析构函数完成后才释放内存。

http://stackoverflow.com/questions/4837223/c-default-destructor

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:C默认析构函数