关于c++构造函数的问题

A *pnt1 = new A;A *pnt2 = new A();这两个调用是有区别的。如果``class A``定义了一个默认构造函数的话,那么这两句没有区别。否则,上面一句调用就不会初始化普通类型(int, double之类的POD类型)值;而下面一句就会用默认值初始化它们。Reference:Do the parentheses after the type name make a difference with new?
■网友
编译器并不总是产生默认构造函数,也不是所有产生的默认构造函数都是non-trivial的。具体参见《深度探索C++对象模型》
■网友
A *pnt1 = new A; A *pnt2 = new A(); 对于C++03标准来说,new A()一定是进行值初始化(value initialize),分为3种情况,如下: 1. 如果A是标量类型(例如:bool,int,char,double,指针)的话,A进行的是zero-initialize,也就是用0来初始化; 2. 如果A是非POD的普通类类型的话,则A()调用默认构造函数来进行初始化。 3. 如果A是POD类类型,通常编译器不会为A生成默认构造函数,那么A()值初始化时,其数据成员分别进行值初始化(联系1)。 对于 new A 来说,情况如下: 1. 如果A是标量类型(例如:bool,int,char,double,指针)的话,A没有被初始化,产生未定义的值。 2. 如果A是非POD的普通类类型的话,则A调用默认构造函数来进行初始化。 3. 如果A是POD类类型,其数据成员并未进行初始化,产生未定义的值。
■网友
C++的类构造函数没有义务初始化每一个基本变量。整形和浮点值会被初始化为任意值(什么都有可能,0也有可能),而成员类的默认构造函数会被依次调用。你试试多运行几次程序,看看结果有没有变化?另外你的编译环境和操作系统是什么?


    推荐阅读