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
相关产品推荐
相关产品推荐

