有一個如下功能:傳遞指針的值
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