You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DX12代码中GetAddressOf与&运算符的使用差异解析

为什么ComPtr的传递方式不一样?

先明确ComPtr两种操作的核心区别:

  • 使用&mCommandQueue时,调用的是ComPtr重载的operator&。这个重载会先释放ComPtr当前持有的COM对象(如果存在),再返回内部原始指针的地址,给Create系列函数使用时,能避免旧指针未释放导致的内存泄漏。
  • 调用GetAddressOf()则是直接返回内部原始指针的地址,不会自动释放当前持有的对象。如果此时ComPtr已经持有对象,直接传递这个地址给创建函数,旧对象的指针会被覆盖,进而造成内存泄漏。

回到代码场景:
这三个ComPtr在调用Create函数前都是未初始化的空状态,所以两种写法实际效果一致。Frank Luna这里混用,大概率是为了展示两种传递方式的用法,或是个人编码习惯。

需要注意的是:如果ComPtr已持有对象,用&更安全,它会自动清理旧对象;而GetAddressOf()需谨慎使用,必须确保当前ComPtr为空,或是你已手动释放了旧对象。


内容的提问来源于stack exchange,提问作者Francisco José Letterio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:25:06