有一个如下功能:传递指针的值
virtual HRESULT GetMediaType(
int iPosition,
CMediaType *pMediaType
);
我怎么称呼它,这样pMediaType作为参考,一切都做的方法传递的对象被保留?
有一个如下功能:传递指针的值
virtual HRESULT GetMediaType(
int iPosition,
CMediaType *pMediaType
);
我怎么称呼它,这样pMediaType作为参考,一切都做的方法传递的对象被保留?
因为您将该对象作为指针赋予该函数,所以对该方法中的对象执行的所有操作都将保留。
您可以通过以下方式调用它:
CMediaType pMediaType;
GetMediaType(0, &pMediaType);
但如果我声明它像一个指针:CMediaType * pMediaType,正确的语法将GetMediaType(0,pMediaType);对? – Luke
正如你现在知道了:
virtual HRESULT GetMediaType( int iPosition, CMediaType *pMediaType );
在这样的代码:
CMediaType mediaType;
...GetMediaType(position, &mediaType);
什么你在上做10里面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规则,保持代码尽可能简单(这样可以避免双重间接指针,如果可以的话)。
您确实如何通过引用传递任何其他类型... –
与&运算符? – Luke
除非您需要更改'pMediaType'指向的内容,否则这不是问题。对象内容的任何更改都直接适用于您传递的地址的对象。 – crashmstr