调用析构函数以释放动态分配的内存

问题描述 投票:0回答:3

请考虑以下代码:

#include <iostream>
class A{
public:
        ~A() {}
};
int main(){
        A *p = new A();
        p->~A();
        return 0;
}

我想知道由A指向的对象p的内存是否已释放,或者我们必须调用delete p;

c++ destructor dynamic-memory-allocation
3个回答
5
投票

1
投票
我们不应将object lifetimedynamic memory management混淆。

[分配内存到类型A的对象无关紧要,释放分配的内存不是A'destructor角色,也不应该显式调用它。它只是一个成员函数,当对象被销毁时会被调用。调用delete后,它将被销毁。

替换:

p->~A();

with:

delete p;

现在您的对象被破坏,分配的内存被释放。


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.