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

C++中无句柄的动态分配变量会怎样?是否会引发内存泄漏?

C++中无句柄实例化类的内存泄漏问题
  • 直接执行new SomeClass();这种无句柄的实例化操作一定会导致内存泄漏。用new在堆上分配的内存必须通过delete释放,而你没有保存对象的指针,后续根本无法调用delete,这块内存会一直占用到程序终止。
  • 对于SomeMethod(new SomeClass())的情况,是否泄漏完全取决于SomeMethod的实现:
    • 如果SomeMethod内部没有对传入的指针执行delete,也没有把指针交给其他会负责释放的实体(比如智能指针、托管容器等),那同样会内存泄漏。方法作用域结束后,只是作为参数的临时指针被销毁,但堆上的对象本身依然存在,没有任何机制会自动释放它。
    • 只有当SomeMethod明确负责释放这个对象(比如内部调用delete ptr;),或者把指针托管给智能指针这类自动管理内存的工具时,才不会泄漏。

现在C++里推荐用智能指针替代裸指针来规避这类问题,比如用std::unique_ptr:

SomeMethod(std::make_unique<SomeClass>());

只要SomeMethod接收的是std::unique_ptr<SomeClass>类型的参数,智能指针就会在生命周期结束时自动释放对象内存,无需手动调用delete。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:15:36