C++: C++中new是否进行初始化的问题
结论:
1、对于有自己写构造函数的类,不论类型名后面有没有括号,都用构造函数进行初始化; 2、如果没有构造函数,则不加括号的new只分配内存空间,不进行内存的初始化, 3、而加了括号的new会在分配内存的同时初始化为0。
例1:
#include <iostream> using namespace std; int main() { int *b=new int[4]; for(int i=0;i<4;i++){ cout<<b[i]<<endl; } delete []b; b=NULL; system("pause"); return 0; }
运行结果:
-842150451
-842150451
-842150451
-842150451
可见,new操作符并没有对内存进行初始化。
例2:
#include <iostream> using namespace std; int main() { int *b=new int[4](); for(int i=0;i<4;i++){ cout<<b[i]<<endl; } delete []b; b=NULL; int *a=new int(); cout<<*a; system("pause"); return 0; }
运行:
输出结果为:
0
0
0
0
可见,已经进行了初始化。