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

C++中`new int`与`new int[1]`的区别是什么?

关于new int和new int[1]的区别

虽然这两行代码看起来都在堆上分配了能容纳一个int的空间,且返回值都是int*,但它们存在本质区别,绝非同义词:

  • 内存分配语义不同
    new int是分配单个int对象的内存,针对单个对象进行初始化(基础类型int默认是未初始化状态,若写成new int()则会初始化为0);而new int[1]是分配一个包含1个int元素的数组内存,属于数组分配逻辑,部分编译器会在内存块额外存储数组长度,用于后续delete[]时正确处理每个元素的销毁。

  • 释放方式必须严格对应
    用new int分配的内存,必须用delete a;释放,若误用delete[] a;属于未定义行为;反之,new int[1]分配的内存必须用delete[] b;释放,用普通delete b;同样是未定义行为——哪怕数组只有一个元素也不能混用。

  • 类型层面的隐性差异
    new int返回的指针直接指向单个int对象;new int[1]返回的指针虽然也是int*(数组退化为指针),但它本质上指向的是数组的首元素,其原始类型是int(*)[1](指向大小为1的int数组的指针),只是做了隐式转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:41:59