Mas*_*tic 5 c# c++ garbage-collection dispose
这个问题一直困扰着我:我在MSDN的DirectX 文章中读到了以下内容:
析构函数(应用程序)应该释放存储的任何(Direct2D)接口......
DemoApp::~DemoApp()
{
SafeRelease(&m_pDirect2dFactory);
SafeRelease(&m_pRenderTarget);
SafeRelease(&m_pLightSlateGrayBrush);
SafeRelease(&m_pCornflowerBlueBrush);
}
Run Code Online (Sandbox Code Playgroud)
现在,如果所有应用程序的数据都在终止(源)上被释放/解除分配,为什么我会麻烦地按顺序创建一个函数来/并单独释放它们?这没有道理!
随着时间的推移,我越来越多地看到这一点,这显然真的让我烦恼.上面的MSDN文章是我第一次遇到这个问题,所以提到所有其他情况都是有意义的.
好吧,因为到目前为止我实际上并没有问我的问题,他们在这里:
谢谢!
当您的应用程序终止时,您无需担心托管内容。当整个过程的记忆被摧毁时,所有的一切都会随之消失。
重要的是非托管资源。
如果您对文件有锁,并且当应用程序关闭时,文件处理程序的托管包装器在您未释放锁的情况下被删除,那么您现在已经丢弃了允许访问该文件的唯一密钥。
如果您有一个内部缓冲区(例如用于记录错误),您可能需要在应用程序终止之前刷新它。如果不这样做,可能意味着导致应用程序结束的致命错误不会被记录。那可能……很糟糕。
如果您打开了网络连接,您将需要关闭它们。如果你不这样做,那么操作系统可能不会为你做这件事(至少暂时不会;最终它可能会注意到不活动),这对于另一端的人来说是相当粗鲁的。他们可能会继续倾听您的回应,或者继续向您发送信息,却不知道您已经不在了。