具有以下功能:
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 规则,使代码尽可能简单(因此,如果可以,请避免使用双间接指针)。