调用析构函数以释放动态分配的内存
Calling destructor to free dynamically allocated memory
让我们考虑以下代码:
#include <iostream>
class A{
public:
~A() {}
};
int main(){
A *p = new A();
p->~A();
return 0;
}
我想知道p
所指向的物体A
记忆是否被释放,或者我们必须调用delete p;
内存未释放。析构函数销毁对象,但不释放内存。怎么可能?您可以销毁动态分配的对象、堆栈上的对象、全局对象等。析构函数不知道释放内存需要什么(如果有的话(。
内存是使用运算符 new 分配的,将使用运算符 delete(而不是对象的析构函数(释放(解除分配(。
我们不应该将对象生存期与动态内存管理混淆。
释放分配的内存不是A'
析构函数角色,不应显式调用它。它只是一个成员函数,当您的对象被销毁时会调用它。打电话给delete
后它会被摧毁.
取代:
p->~A();
跟:
delete p;
现在,您的对象将被销毁,分配的内存将被解除分配。
调用析构函数或任何其他成员函数之间没有区别,除了一件事 - 你不应该这样做,除非你想将对象分配与其构造和销毁分开。
相关文章:
- 对具有动态分配的内存和析构函数的类对象的引用
- 调用析构函数以释放动态分配的内存
- 在运行时为动态分配的内存输入值
- 释放动态分配的内存时是否需要执行此额外步骤
- 动态分配字符数组的内存
- 销毁C++中动态分配的内存(数组对象)
- 删除类成员的动态分配内存的最佳方法是什么
- 动态分配的内存构造函数
- 为什么动态分配的内存总是16字节对齐
- 如果您为类的一个对象动态分配内存作为参数,会发生什么
- 为什么动态分配的两个变量的内存位置不是连续的?
- 为浮点数组动态分配内存
- 动态分配 8 字节的内存
- 包含动态分配内存作为值的映射的取消定位速度有多快?
- STD分配器是否会在堆上动态分配内存?它可以安全地删除内存吗?
- 为什么不能在 Visual C++ 中动态分配堆栈内存?但海湾合作委员会可以做到
- 在C 中动态分配的内存的问题
- 为什么在 C++ 执行删除操作后仍可以访问释放的动态分配的内存
- 对内存动态分配的类不使用"*"的逻辑
- 如果我将内存动态分配给静态变量,我应该释放它还是会自动释放它