隐式默认构造函数具有空主体和空初始化列表(原始类型未定义,并且为用户定义的类型调用默认构造函数).
这篇帖子说
MyClass *c = new MyClass();
Run Code Online (Sandbox Code Playgroud)
确实做了一个成员方面的值初始化,但是在做什么时调用默认构造函数是什么意思
MyClass c;
Run Code Online (Sandbox Code Playgroud)
?
是否调用了隐式默认构造函数,以确保调用用户定义类型(可能具有非平凡的默认构造函数)的默认构造函数?
更新
似乎在调用编译器生成的隐式默认构造函数之后,可能无法一致地实例化对象,即原始类型未定义,并且用户定义的类型可能(或可能不)处于已知状态,具体取决于程序员是否提供了默认构造函数.
那么为什么编译器会生成一个隐式的默认构造函数,当调用它时可能会实例化一个未知状态的对象?
隐式默认构造函数的点与任何其他构造函数的点相同.
有些东西需要构造给定类的每个实例.类实例本身不会凭空出现.某个地方的东西有构建对象的工作.
如果未声明显式构造函数,则会自动定义隐式默认构造函数,默认构造类的超类和任何类成员.
这里,"default-constructs"还包括"do nothing"选项,如果类成员是没有显式构造函数的基本类型.因此,最后,隐式默认构造函数可能最终无效.但是如果没有指定显式构造函数(并且当然没有显式删除隐式默认构造函数),它仍然被定义.