new 一个对象的时候加括号和不加括号有什么区别
2013-12-18 15:13
405 查看
先看以下代码:
#include <iostream>
using namespace std;
int main()
{
int *a=new int[1000];
for(int i=0;i<1000;i++){
a[i]=i+1;
}
delete[] a;
int *b=new int[1000];
for(int i=0;i<100;i++){
cout<<b[i]<<endl;
}
return 0;
}
没有初始化,输出的结果是:
9437380
9443448
3
4
5
6
。。。
可见,new操作符并没有对内存进行初始化。
而稍微改变一下代码(在new之后添加括号()):
#include <iostream>
using namespace std;
int main()
{
int *a=new int[1000];
for(int i=0;i<1000;i++){
a[i]=i+1;
}
delete[] a;
int *b=new int[1000]();
for(int i=0;i<100;i++){
cout<<b[i]<<endl;
}
return 0;
}
输出结果为:
0
0
0
0
。。
可见,已经进行了初始化。
=============================================================================
进一步思考:
定义类A:
class A{
public:
int a;
A():a(10){};
};
main函数中使用语句:
A *b=new A;
cout<<b->a<<endl;
A *b=new A();
cout<<b->a<<endl;
输出结果都是10,可见都进行了初始化。
但是,如果吧A的构造函数删掉,则两个语句输出的结果分别是:随机数,0。
由此可见,C++在new时的初始化的规律可能为:对于有构造函数的类,不论有没有括号,都用构造函数进行初始化;如果没有构造函数,则会调用默认的构造函数或无参的构造函数,而且不加括号的new只分配内存空间,不进行内存的初始化,而加了括号的new会在分配内存的同时初始化为0。
PS:1.原文地址:http://hi.baidu.com/maxy218/item/8cd098256327c1829d63d1ca
2.修改参考:http://bbs.csdn.net/topics/320161716
#include <iostream>
using namespace std;
int main()
{
int *a=new int[1000];
for(int i=0;i<1000;i++){
a[i]=i+1;
}
delete[] a;
int *b=new int[1000];
for(int i=0;i<100;i++){
cout<<b[i]<<endl;
}
return 0;
}
没有初始化,输出的结果是:
9437380
9443448
3
4
5
6
。。。
可见,new操作符并没有对内存进行初始化。
而稍微改变一下代码(在new之后添加括号()):
#include <iostream>
using namespace std;
int main()
{
int *a=new int[1000];
for(int i=0;i<1000;i++){
a[i]=i+1;
}
delete[] a;
int *b=new int[1000]();
for(int i=0;i<100;i++){
cout<<b[i]<<endl;
}
return 0;
}
输出结果为:
0
0
0
0
。。
可见,已经进行了初始化。
=============================================================================
进一步思考:
定义类A:
class A{
public:
int a;
A():a(10){};
};
main函数中使用语句:
A *b=new A;
cout<<b->a<<endl;
A *b=new A();
cout<<b->a<<endl;
输出结果都是10,可见都进行了初始化。
但是,如果吧A的构造函数删掉,则两个语句输出的结果分别是:随机数,0。
由此可见,C++在new时的初始化的规律可能为:对于有构造函数的类,不论有没有括号,都用构造函数进行初始化;如果没有构造函数,则会调用默认的构造函数或无参的构造函数,而且不加括号的new只分配内存空间,不进行内存的初始化,而加了括号的new会在分配内存的同时初始化为0。
PS:1.原文地址:http://hi.baidu.com/maxy218/item/8cd098256327c1829d63d1ca
2.修改参考:http://bbs.csdn.net/topics/320161716
相关文章推荐
- C++中new 一个对象的时候加括号和不加括号的区别
- C++中new 一个对象的时候加括号和不加括号的区别
- 创建一个对象 new 与 不加new 有什么区别
- new一个类对象和使用类名创建一个对象有什么区别?该怎么解决
- 在初始化一个类,生成一个实例的时候;newInstance() 和 new 有什么区别?
- Javascript中调用一个函数(对象),使用new或者直接调用有什么区别?
- new一个类对象和使用类名创建一个对象有什么区别?
- 在初始化一个类,生成一个实例的时候;newInstance() 和 new 有什么区别?
- C++中new 一个对象的时候加括号和不加括号的区别
- C++中new 一个对象的时候加括号和不加括号的区别
- new创建一个对象,是否需要加括号?
- new一个类对象和使用类名创建一个对象有什么区别?
- new 对象时加不加括号的区别(c++对象)
- new一个对象的时候JVM都做了哪些事情
- 【转】new对象时,类名后加括号和不加括号的区别
- 对于String对象,可以使用"="赋值,也可以使用"new"关键字赋值,两种方式有什么区别?
- C++中创建对象的时候加括号和不加括号的区别
- 【Hibernate】中Query对象在获取表的所有的数据的时候,使用list()和 iterator()有什么区别?
- Query对象在获取表的所有的数据的时候,使用list()和 iterator()有什么区别?
- new 出一个对象 和 = null的区别