<c++> new并不确保会进行初始化

0、   new运算符并不一定会进行初始化!!

 

coolblog(个人博客):http://blog.coolight.cool/?p=416

 

1、   我们都知道new出来的空间是在 堆 的

但它并不一定会得到初始化,例如在VS2019中就没有,这里举例了4种常见的

 

分别是:

  全局区new,

  全局区声明,

  函数内new,

  函数内声明

 

如果直接运行会报错,显然是因为函数内声明需要初始化后才能访问

 

既然如此,我们只需要给 函数内声明的变量  fun_int  初始化即可运行

 

可以看到,编译器唯一会帮我们初始化的只有在全局区直接声明的变量初始化为0

而2个new出来的空间均未被初始化

 

3、养成自己初始化的习惯才是比较保险的

 

4、值得一提的是:new出来的空间并没有访问权限的限制

只要知道其地址并且未被delete即可访问。

例如:调用一个函数,并在里面new出一连串空间,

再把首地址返回,则在该函数外依然可以访问并使用这些空间

如图中在text中new出来的空间在main函数中依然可以访问,并不会随着text()的结束而被销毁

这同时也是新手容易产生的内存泄露,误认为该内存空间会被回收。

 

posted @ 2021-07-20 21:41  coolight7  阅读(329)  评论(0)    收藏  举报