int *p1 = new int[10]; int *p2 = new int[10](); 区别
来源:互联网 发布:索尼 降噪豆 软件更新 编辑:程序博客网 时间:2024/05/16 06:31
下面描述正确的是
int *p1 = new int[10];
int *p2 = new int[10]();
p1和p2申请的空间里面的值都是随机值
p1和p2申请的空间里的值都已经初始化
p1申请的空间里的值是随机值,p2申请的空间里的值已经初始化(对)
p1申请的空间里的值已经初始化,p2申请的空间里的值是随机值
解释
在C++primer(第5版)中关于new的讨论有:
1、new当个对象
new在自由空间分配内存,但其无法为其分配的对象命名,因次是无名的,分配之后返回一个指向该对象的指针。
1
int *pi = new int; // pi指向一个动态分配的,未初始化的无名对象
此new表达式在自由空间构造一个int类型对象,并返回指向该对象的指针。
默认情况下,动态分配的对象是默认初始化的,这意味着内置类型或组合类型的对象的值是无定义的,而类类型对象将用默认构造函数进行初始化。
2、new(多个对象)数组
new分配的对象,不管单个对象还是多个对象的分配,都是默认初始化。但可以对数组进行值初始化,方法就是:在大小之后添加一对空括号。
int *pia = new int[10]; // 10个未初始化int
int *pia2 = new int[10](); // 10个值初始化为0的int
int *p2 = new int[10]();申请了空间,而且进行了初始化int *p1 = new int[10];只申请空间,没有进行初始化原因:对于一些结构体,我们可以看到()往往表示构造函数,int是基本类型算初始化吧理由:你可以测试输出两种的值你会发现p1的值未知,而p2清零了
new运算符只是申请分配一个内存空间而已,因为不知道为其分配对象的名称,所以分配之后返回的只是一个指向该对象的指针,并没有初始化,加上一个()后,就相当于调用了默认构造函数,会默认初始化,用0来初始化
均转载,侵删除。
- int *p1 = new int[10]; int *p2 = new int[10](); 的区别
- int *p1 = new int[10]; int *p2 = new int[10](); 区别
- int *p=new int; int *p=new int[10]; int *p=new int(10);这三个有什么区别
- int a 和int*a = new int 的区别
- c++中int a[10]和int a=new int[10]]有什么区别
- int* pInt = new int(5)和int* pInt = new int[5]的区别
- int *p = new int(5); 和 int *p = new int[5]的区别
- int* p = new int[5](); 与 int* q = new int[5]; 的区别
- new int[10]()
- int *p = new int[10]; int *p = new int(10); http://bbs.csdn.net/topics/340186719
- c++中int a, int *a=new int和 int *a=new int()
- swap( int* p1,int* p2 )找错
- int [][]a=new int[4][4]
- int[][] pas = new int[6][];
- c++ int *p = new int()
- C++中针对int *p = new int(5) 与 int *p = new int[5]的区别
- int* pInt = new int(5);和int* pInt = new int[5];
- int* pInt = new int(5);和int* pInt = new int[5];
- 第九周【项目一-猴子选大王2(数组版)】
- JQuery 之从 $(核心函数)加载事件入门
- :after/::after和:before/::before的区别
- 杭电OJ2014
- Android Activity回收与操作超时处理
- int *p1 = new int[10]; int *p2 = new int[10](); 区别
- 无需安装百度云就能下载大文件方法
- 杭电OJ2015
- linux系统编程之信号(五):实时信号与sigqueue函数
- Web 前端知识点总结
- html实体
- UML类建模(强烈推荐-思路很清晰)
- 杭电OJ2018
- SQL Error: 1054, SQLState: 42S22