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

使用new创建的带属性C++对象如何安全释放?delete能否清理所有成员内存?

问题1:代码写法是否正确?

这段代码存在语法错误,无法通过编译。
核心错误出现在b->letters_in_box = "Hello world";这一行:letters_in_box是类内定义的固定长度char数组成员,数组名本质是代表数组首地址的常量,不允许直接通过等号对整个数组赋值。如果要给该数组写入字符串,需要改为调用strcpy这类字符串拷贝函数:

// 替换原来的赋值行,注意要先引入<cstring>头文件才能用strcpy
strcpy(b->letters_in_box, "Hello world");

使用时还要注意写入的字符串总长度(包括末尾的\0结束符)不要超过数组的80字节上限,避免出现缓冲区溢出问题。

问题2:delete b后成员内存是否会被一同清理?

修复上述语法错误后,执行delete b时,length和letters_in_box关联的内存都会被一同释放。
原因是这两个成员都是Box对象的内嵌成员,它们的内存完全包含在Box对象的整体内存布局中:你调用new Box时申请的堆内存,本身就已经覆盖了double类型成员和80字节char数组成员需要的全部空间,不存在额外独立的堆内存分配。因此delete b会将整个Box对象占用的堆内存全部归还给系统,两个成员的内存自然也会同步被回收。
注意:这里的“清理”指的是内存的使用权被回收,后续再通过野指针访问这部分内存属于未定义行为,并不代表内存上存储的内容会被自动擦除或置零。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:36:02