【发布时间】:2012-11-05 12:41:41
【问题描述】:
这个问题困扰了我一段时间:我在 MSDN 的 DirectX article 中阅读了以下内容:
析构函数(应用程序的) 应该释放所有存储的(Direct2D) 接口...
DemoApp::~DemoApp()
{
SafeRelease(&m_pDirect2dFactory);
SafeRelease(&m_pRenderTarget);
SafeRelease(&m_pLightSlateGrayBrush);
SafeRelease(&m_pCornflowerBlueBrush);
}
现在,如果应用程序的所有数据都在终止时被释放/解除分配 (source),为什么我还要麻烦地按顺序创建一个函数/并单独释放它们?这毫无意义!
随着时间的推移,我越来越多地看到这种情况,这显然让我很烦恼。 上面的 MSDN 文章是我第一次遇到这种情况,因此在所有其他情况下提及它是有道理的。
好吧,既然到目前为止我还没有真正问过我的问题,那就是:
- 我需要在终止前释放一些东西吗? (请解释原因)
- MSDN 中的作者为什么选择这样做?
- 答案是否与本机代码和托管代码不同? IE。在编写 C# 程序时,是否需要确保在程序结束时处理所有内容? (我不了解 Java,但如果存在处置,我相信其他成员也会对此表示赞赏)。
谢谢!
【问题讨论】:
-
嗯,内存是唯一的一种资源。虽然内存会被操作系统释放(因为它足够智能),但其他一些资源可能会丢失。
-
这个问题是关于 C++ 还是 C#?他们会有非常不同的答案!
-
@MooingDuck 我实际上已经问过(最后一个问题)这两种情况的答案是什么。
标签: c# c++ garbage-collection dispose