Skip to content

[c++]new运算符并不确保会自动初始化

new运算符

new运算符会在堆上申请一段内存空间,一般的变量是在栈上的。

new出来的变量只要不delete释放,在其他函数等任意位置都可以使用,

new会返回这段内存空间的首地址。

new并不确保会自动初始化


测试

  • 这里我们使用vs2019运行测试
  • 待测试的一共有4种变量申请方法:
    • 全局区new - 图中global_new_int
    • 全局区声明 - 图中global_int
    • 函数内new - 图中fun_new_int
    • 函数内声明 - 图中fun_int

  • 直接运行是过不了vs2019的编译的
  • 提示fun_int没有进行初始化就被使用
  • 因此 函数内声明的变量 就显然是需要自己手动初始化的,编译器不会帮我们。
  • 接下来给fun_int手动初始化,改为int fun_int = 123;

  • 运行结果

    • 全局区new - 不会自动初始化

    • 全局区声明 - 会自动初始化为0

    • 函数内new - 不会自动初始化

    • 函数内声明 - 不会自动初始化,而且不手动初始化的话连编译都过不了


结论

  • 可见new的不管是在全局区还是函数内都不会自动初始化。
  • 而在全局区直接定义变量是会自动初始化的。
  • 自己习惯手动初始化才是最保险的。