先把结论放上来:
以下代码: #include <iostream> 没有初始化,输出的结果是: 9437380 9443448 3 4 5 6 。。。 可见,new操作符并没有对内存进行初始化。 而稍微改变一下代码(在new之后添加括号()): #include <iostream> 输出结果为: 0 0 0 0 。。 可见,已经进行了初始化。 ============================================================================= 进一步思考: 定义类A: class A{ main函数中使用语句: A *b=new A; 输出结果都是10,可见都进行了初始化。 但是,如果吧A的构造函数删掉,则两个语句输出的结果分别是:随机数,0。
由此可见,C++在new时的初始化的规律可能为:对于有构造函数的类,不论有没有括号,都用构造函数进行初始化;如果没有构造函数,则不加括号的new只分配内存空间,不进行内存的初始化,而加了括号的new会在分配内存的同时初始化为0。 PS:1.原文地址:http://hi.baidu.com/maxy218/item/8cd098256327c1829d63d1ca 2.修改参考:http://bbs.csdn.net/topics/320161716 http://blog.csdn.net/ymqq1/article/details/8899184 |
|