C++ 中为什么编译器会提示使用未初始化内存初始化

C++在new时的初始化的规律可能为:对於有构造函数的类不论有没有括号,都用构造函数进行初始化;如果没有构造函数则不加括号的new只分配内存初始化空间,不进行内存初始化的初始化而加了括号的new会在分配内存初始化的同时初始化为0。

没有初始化输出的结果是:

可见,new操作符并没有对内存初始化进荇初始化

而稍微改变一下代码(在new之后添加括号()):

可见,已经进行了初始化

main函数中使用语句:

输出结果都是10,可见都进行了初始化

但是,如果吧A的构造函数删掉则两个语句输出的结果分别是:随机数,0

由此可见,C++在new时的初始化的规律可能为:对于有构造函数的類不论有没有括号,都用构造函数进行初始化;如果没有构造函数则不加括号的new只分配内存初始化空间,不进行内存初始化的初始化而加了括号的new会在分配内存初始化的同时初始化为0。

还有初始化和赋值的不同是不昰只表现在给内存初始化写数据的时机上,就是初始化是不是第一次的赋值... 还有,初始化和赋值的不同是不是只表现在给内存初始化写數据的时机上就是初始化是不是第一次的赋值?

所以编程时我们定义变量都要考虑初始化问题尤其是指针、一些类、结构体等等。

像指针未初始化往往会导致莫名其妙的问题产生

我知道初始化和赋值不一样请问初始化是不是就是第一次的赋值,还是有还是有别的什么區别
 第一次赋不一定是初始化但初始化的意义也不止体现在第一次赋值上吧。(我好像说啰嗦了···)
准确地说初始化赋值和普通赋值應该说不同点是:
初始化提供的是一个”安全“的值即使后来程序运行时未再次赋值,逻辑上也不会发生bug(我个人下的定义)
普通赋徝是程序运行中为完成某功能涉及到的”必须的语句“。
也就是说初始化对于程序能不能顺利运行完不是必要条件但是他对于程序的健壯性很有必要存在。
最好在变量声明的时候就做初始化比如 int a=0;
有时候是在程序某模块的入口,比如某全局变量指针每次调用到这个模塊,就初始化到默认值(

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

我要回帖

更多关于 内存初始化 的文章

 

随机推荐