new 实例化对象的问题
new 实例化对象,见过两种写法:
CDog *d=new CDog;
CDog *d=new CDog();
编译都能通过,有什么区别吗?
[解决办法]
对 类型来说没区别,对内置类型来说,第2个会初始化为 0
[解决办法]
[解决办法]
类类型* p=new 类类型(); 与 类类型* p=new 类类型; 二者一样都会调用构造函数
int*p1=new int(); int*p2=new int;前者*p1会被初始化为0,后者*p2不作初始化是个随机数
[解决办法]
根据标准:
int *pi = new int; -> *pi的值不确定(5.3.4 - New 条款15)
int *pi = new int(); -> *pi执行默认初始化(5.3.4 - New 条款15),再根据默认初始化的条款(8.5 - Initializers 条款5),即为执行0初始化
[解决办法]
不过要初始化的话,这种事最好不要让编译器给你做,自己最好显示的初始化
[解决办法]
有时间的话,你也可以看看这个帖子
http://topic.csdn.net/u/20090714/00/e7dad941-daf0-4905-a679-7a56ff412f77.html