读书人

new 实例化对象的有关问题

发布时间: 2012-05-24 11:55:41 作者: rapoo

new 实例化对象的问题
new 实例化对象,见过两种写法:
CDog *d=new CDog;
CDog *d=new CDog();
编译都能通过,有什么区别吗?

[解决办法]
对 类型来说没区别,对内置类型来说,第2个会初始化为 0
[解决办法]

探讨
引用:
int *pi=new int(0)和int *pi=new int()是一样的

是吗?C/C++ codeint*pi=newint();
cout<<*pi<<endl;
那为什么我调试以上程序的结果为-842150451?

[解决办法]
类类型* 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

读书人网 >C++

热点推荐