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

C++合成析构函数是否会自动释放类内分配的堆内存?

回答

你给出的代码执行结束后,构造函数里分配的堆内存不会被自动释放,会产生内存泄漏,必须像示例那样显式定义析构函数执行delete操作才能释放这部分内存。

原理说明

  • 没有自定义析构函数的时候,编译器自动生成的默认析构函数只会回收类对象本身占用的内存:成员变量p是指针类型,默认析构只会把p本身占的那点内存(通常为4字节或8字节,由系统位数决定)释放掉,完全不会处理p指向的堆内存空间。
  • 你在构造函数里通过new int(a)申请的堆内存,没有任何内置机制会自动帮你回收,只要你不主动在析构函数中调用delete p,这块内存就会一直被占用,直到整个程序退出才会被操作系统回收。

你给出的第二个显式定义析构函数的示例是正确写法,对象离开作用域时自定义析构会被自动调用,正常释放堆内存,不会出现泄漏。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:36:04