按值传递指针
Pass pointer by value
具有以下功能:
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);
您在正文pMediaType
内部执行的任何操作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 规则,使代码尽可能简单(因此,如果可以的话,请避免使用双间接指针)。
相关文章:
- 何时应通过引用传递矢量参数而不是按值传递矢量参数?
- C++类 - 初始化列表 - 递归 - 按值传递
- 将函数参数完美转发到函数指针:按值传递呢?
- 棘手的按值传递和按引用递归问题传递
- 不同于按值传递和常量引用传递的程序集
- 按值传递变量与按引用传递变量具有相同的结果
- 为什么按值传递QStringView比引用常量更快?
- 获取 std::函数以推断按引用传递/按值传递
- 在函数中按值传递 unordered_map/unordered_set 是否有效? C++
- 在C++中指针是按值传递的吗
- 按值传递指针
- 为什么在按值传递指针之后再按引用传递指针会指向原始内存位置
- 按值传递指针,其中应该通过引用传递指针
- 递归插入到二叉树中,按值传递指针
- 如何使用指针按值传递
- 我应该按值传递字符串还是将指针传递给它
- c++中的指针按值/引用传递
- 按值传递共享指针并接受作为基类参数是如何工作的
- 按值传递/指针传递/引用澄清
- 按值传递可调用对象,将其分配给指针成员