You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中new int[3]与new int[3]()的区别是什么?

两个new数组表达式的实际差异
  • int *p = new int[3]; 执行的是默认初始化
    对于int这类内置算术类型,默认初始化不会做任何初始化操作,数组元素的取值是未定义的。你观测到的全0只是运行环境的巧合:现代操作系统为了避免不同进程间的数据泄露,给进程初次分配的内存页会预先清0;但如果是复用已经被释放的旧内存,数组里就会残留之前的脏数据,此时直接读取元素值属于未定义行为。
  • int *q = new int[3](); 执行的是值初始化
    这是C++标准明确规定的可控行为,对于int这类内置类型,值初始化会强制将每个元素初始化为0,无论当前申请的内存是新分配的还是复用的,数组元素的取值永远是确定的0。

你可以自己构造场景验证差异:先申请一段相同大小的数组写入非0值,释放后再申请无初始化的数组,就能看到p指向的数组会残留之前写入的数据,而带括号初始化的q永远返回全0。

内容的提问来源于stack exchange,提问作者yapkm01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:15:02