を所有するクラスがあるとしましょうD3DDevice
:
class Thing
{
public:
Thing()
{
D3D11CreateDevice(..., &device, ...);
}
~Thing()
{
device->Release();
}
private:
ID3D11Device* device;
};
私が理解していることから、デストラクタ_com_ptr_t
を明示的に呼び出さなくても、オブジェクトが確実に削除されるようにするために使用できます。Release()
ただし、問題は、テンプレートの正しい構文がわからないことです。
の情報はほとんど見つかりませんでし_com_ptr_t
たが、答えに一番近いのはこれ(日本語)でした。そこでの構文に続いて、私はたくさんのコンパイラエラーを受け取ります:
private:
//ID3D11Device* device;
_com_ptr_t <_com_IIID<ID3D11Device, &__uuidof(ID3D11Device)>> device;
error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'
error C2065: 'device' : undeclared identifier
ちなみに、これを使用して関数からCOMポインターを返し、呼び出し元のスコープを離れたときに確実に削除されるようにすることができます。