main例如,在我的C++ 函数中,如果我有一个指向使用堆内存的变量的指针(而不是堆栈内存) - 在我的应用程序退出后会自动解除分配吗?我会这么认为.
即便如此,即使您认为永远不会在退出时自动释放内存的情况下使用堆分配,也总是删除堆分配是一种好习惯吗?
例如,这样做有什么意义吗?
int main(...)
{
A* a = new A();
a->DoSomething();
delete a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想也许以防我重构(或其他人重构)代码并将其放在应用程序的其他地方,这delete真的是必要的.
除了Brian R. Bondy(其中特别谈到C++中的含义)的答案之外,Paul Tomblin 对C特定问题也有一个很好的答案,该问题也讨论了C++析构函数.
#include <iostream>
class Dude
{
public:
int age;
Dude(int age)
{
this->age = age;
}
};
int main(int argc, char* argv[])
{
Dude *dude1 = new Dude(21);
std::cout << dude1->age << '\n';
delete dude1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是释放对象内存dude1和销毁对象的正确方法吗dude1?
如果保留为默认析构函数,析构函数会执行哪些内存释放和清理?
dude1->~Dude();
这段代码的作用是什么?