按值传递指针

时间:2014-03-05 14:14:37

标签: c++ pass-by-reference pass-by-pointer

具有以下功能:

virtual HRESULT GetMediaType(
  int iPosition,
  CMediaType *pMediaType
);

如何调用它以便通过引用传递pMediaType并保留对方法中对象所做的一切?

2 个答案:

答案 0 :(得分:5)

因为您将对象作为指针提供给函数,所以保留了对方法中对象所做的一切。

您可以通过以下方式调用它:

CMediaType pMediaType;
GetMediaType( 0, &pMediaType );

答案 1 :(得分:0)

你现在拥有它:

virtual HRESULT GetMediaType(
  int iPosition,
  CMediaType *pMediaType
);
在这样的代码中

CMediaType mediaType;
...GetMediaType(position, &mediaType);

您在pMediaType正文GetMediaType()内所做的任何内容都是“保留”在呼叫网站上,因为您将指针传递给{ {1}}。

但是,如果要在mediaType正文中创建CMediaType的新实例,并将其作为输出指针值返回,调用者必须在使用后以某种方式释放(类似于COM {{ 1}}),然后你可以使用双间接指针,例如

GetMediaType()

使用示例:

IUnknown::QueryInterface()

无论如何,尝试应用KISS规则,保持代码尽可能简单(如果可以的话,避免使用双重间接指针)。