次の機能を持つ:
virtual HRESULT GetMediaType(
int iPosition,
CMediaType *pMediaType
);
pMediaType が参照によって渡され、メソッド内のオブジェクトに対して行われたすべてが保持されるように呼び出すにはどうすればよいですか?
次の機能を持つ:
virtual HRESULT GetMediaType(
int iPosition,
CMediaType *pMediaType
);
pMediaType が参照によって渡され、メソッド内のオブジェクトに対して行われたすべてが保持されるように呼び出すにはどうすればよいですか?
オブジェクトをポインターとして関数に渡すため、メソッド内のオブジェクトに対して行われたすべての処理が保持されます。
次の方法で呼び出すことができます。
CMediaType pMediaType;
GetMediaType( 0, &pMediaType );
あなたが現在持っているように:
virtual HRESULT GetMediaType( int iPosition, CMediaType *pMediaType );
次のようなコードで:
CMediaType mediaType;
...GetMediaType(position, &mediaType);
へのポインターを渡しているため、 bodypMediaType
内で行うことはすべて呼び出しサイトで「保持」されます。GetMediaType()
mediaType
CMediaType
ただし、ボディ内の新しいインスタンスを作成GetMediaType()
し、呼び出し元が使用後に何らかの方法で解放する必要がある出力ポインター値としてそれを返したい場合 ( COM のようなもの)、二重間接ポインターをIUnknown::QueryInterface()
使用できます。
virtual HRESULT GetMediaType(
int iPosition,
CMediaType** ppMediaType // [OUT] Created by the method, must be freed by the caller
);
使用例:
CMediaType* pMediaType = nullptr;
...GetMediaType(iPosition, &pMediaType);
... use pMediaType ...
...
... somehow release pMediaType
とにかく、KISS ルールを適用して、コードをできるだけ単純に保つようにしてください (可能であれば、二重間接ポインターは避けてください)。