【发布时间】:2014-05-02 23:17:42
【问题描述】:
我的代码中有很多接口,我想将重复的Release 代码封装在另一个方法中,而不是宏中,因为这是 C++,我讨厌使用宏。我最初的尝试是写一个方法,比如
void SafeRelease(IUnknown **ppInterface) {
if(*ppInterface) {
(*ppInterface)->Release();
(*ppInterface) = nullptr;
}
}
但是将此方法应用于IDirect3DSurface9 *,例如像SafeRelease(&mySurface) 这样会产生错误IDirect3DSurface9 ** is incompatible with IUnknown **。
- 我在这里做错了什么?
- 是否有更好的方法(希望不使用宏)来实现这样的功能?
【问题讨论】:
-
有理由创建这样的函数而不是使用
ComPtr吗?
标签: c++ memory-management com directx iunknown