【发布时间】:2020-07-22 05:59:43
【问题描述】:
我对 c++ 有一点疑问
我怎样才能在没有内存泄漏的情况下销毁这段代码?
void classA::funcA()
{
static char* cArr = new char[10];
}
就不要这样写吗?
【问题讨论】:
-
真的没必要调用delete。是的,这是内存泄漏,因为您没有释放内存,但静态变量只初始化一次,这意味着您只调用一次
new,并且变量在程序结束之前不会被销毁无论如何,所有内存都会返回给操作系统。 -
或者使用智能指针来确保它是明确的
deleteed。虽然,正如@NathanOliver 所提到的,在程序结束时它将是deleteded。 -
@Gupta 它没有得到
deleted,如果你依赖析构函数实际做一些重要的事情,这可能是非平凡类型的问题。对于这种情况,OP 的问题会更加相关。 -
@walnut 你的意思是静态对象的 dtor 不会在程序结束时为非平凡类型调用?
-
@Gupta 调用了静态对象的析构函数,但我的意思是静态对象是指向分配有
new的非平凡可破坏对象的指针的情况,如OP 的示例所示。不会自动调用动态分配对象的析构函数。
标签: c++ memory-management memory-leaks static destructor