C++中new是否进行初始化的问题
来源:互联网 发布:淘宝我的好友在哪里找 编辑:程序博客网 时间:2024/05/16 17:30
C++在new时的初始化的规律可能为:对于有构造函数的类,不论有没有括号,都用构造函数进行初始化;如果没有构造函数,则不加括号的new只分配内存空间,不进行内存的初始化,而加了括号的new会在分配内存的同时初始化为0。
以下代码:
#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操作符并没有对内存进行初始化。
而稍微改变一下代码(在new之后添加括号()):
#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
0
可见,已经进行了初始化。
=============================================================================
进一步思考:
定义类A:
class A{public: int a; A():a(10){};};
main函数中使用语句:
<pre name="code" class="cpp">A *b=new A;cout<<b->a<<endl;
A *b=new A();cout<<b->a<<endl;
输出结果都是10,可见都进行了初始化。
但是,如果吧A的构造函数删掉,则两个语句输出的结果分别是:随机数,0。
由此可见,C++在new时的初始化的规律可能为:对于有构造函数的类,不论有没有括号,都用构造函数进行初始化;如果没有构造函数,则不加括号的new只分配内存空间,不进行内存的初始化,而加了括号的new会在分配内存的同时初始化为0。
0 0
- C++中new是否进行初始化的问题
- 关于C++的new是否会对内存初始化的问题
- 关于C++的new是否会对内存初始化的问题
- 关于C++的new是否会对内存初始化的问题
- C语言中变量的初始化问题
- C语言中数组的初始化问题
- C程序中,变量的初始化问题
- C语言中数组的初始化问题
- 使用new时的初始化问题
- java变量是否需要初始化的问题
- C语言中变量没有初始化 所带来的问题
- C中全局变量和局部变量的初始化问题
- C中struct(结构体)初始化的问题
- 关于c语言中double指针的初始化问题
- 关于 AfxOleInit进行初始化的问题
- java--new的初始化
- new数组的初始化
- new的初始化
- 海量数据相似度计算之simhash短文本查找
- 【暑期基础3】B HDU 2054 A == B ?
- 包装类、String转为int、正则表达式
- 机器学习之从logistic到神经网络算法
- Java 23种模式一点就通
- C++中new是否进行初始化的问题
- HDU 1024 Max Sum Plus Plus【DP】
- ashx一般处理程序接收ajax传回的json字符串,并写入到数据库
- hdu 1241 AC广搜
- 并查集 Ⅲ
- hadoop程序由1.X升级至2.x
- CSDN学院 免费技术答疑公开课,本周四场即将开播~~~
- 代码静态检查-cppcheck
- java IO流(properties)