C++隐式默认构造函数有什么意义?

rob*_*r78 3 c++ constructor

隐式默认构造函数具有空主体和空初始化列表(原始类型未定义,并且为用户定义的类型调用默认构造函数).

这篇帖子

MyClass *c = new MyClass();
Run Code Online (Sandbox Code Playgroud)

确实做了一个成员方面的值初始化,但是在做什么时调用默认构造函数是什么意思

MyClass c;
Run Code Online (Sandbox Code Playgroud)

是否调用了隐式默认构造函数,以确保调用用户定义类型(可能具有非平凡的默认构造函数)的默认构造函数?


更新

似乎在调用编译器生成的隐式默认构造函数之后,可能无法一致地实例化对象,即原始类型未定义,并且用户定义的类型可能(或可能不)处于已知状态,具体取决于程序员是否提供了默认构造函数.

那么为什么编译器会生成一个隐式的默认构造函数,当调用它时可能会实例化一个未知状态的对象?

Sam*_*hik 5

隐式默认构造函数的点与任何其他构造函数的点相同.

有些东西需要构造给定类的每个实例.类实例本身不会凭空出现.某个地方的东西有构建对象的工作.

如果未声明显式构造函数,则会自动定义隐式默认构造函数,默认构造类的超类和任何类成员.

这里,"default-constructs"还包括"do nothing"选项,如果类成员是没有显式构造函数的基本类型.因此,最后,隐式默认构造函数可能最终无效.但是如果没有指定显式构造函数(并且当然没有显式删除隐式默认构造函数),它仍然被定义.