我正在研究如何创建一个简单的 Direct2D 应用程序的示例SafeRelease
,作者定义了一个类模板和一个方法,调用如下:
template<class Interface>
inline void SafeRelease(
Interface **ppInterfaceToRelease
)
{
if (*ppInterfaceToRelease != NULL)
{
(*ppInterfaceToRelease)->Release();
(*ppInterfaceToRelease) = NULL;
}
}
上面的代码来自头文件。但是,该类的析构函数会进行以下调用:
DemoApp::~DemoApp()
{
SafeRelease(&m_pDirect2dFactory);
SafeRelease(&m_pRenderTarget);
SafeRelease(&m_pLightSlateGrayBrush);
SafeRelease(&m_pCornflowerBlueBrush);
}
我刚开始学习 c++,我想知道这些调用是合法的。显然我对指针作为过程参数的理解是有缺陷的,所以请纠正我。接受指针类型的过程如何接受地址?另外,当我按 F12 时,Visual Studio 找不到该Release
方法的声明,但我怀疑它与 COM 释放方法有关,因此解释它内部发生的事情会非常有帮助,因为我不能“调试时进入”它。所以 - 代码工作得很好,我只是想知道为什么。完整的源代码可以在这里找到。