私は単純な 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 のリリース メソッドと関係があると思われます。デバッグ時に「ステップイン」します。コードは問題なく動作しますが、その理由が気になります。完全なソース コードはここにあります。