我正在查看WinRT的一些Direct3D代码,并注意那里的“ref classes”使用“ComPtr<ID3D11Device1>
”而不是“ID3D11Device1*
”。所以我的问题是你必须在“ref class”中使用“ComPtr”,还是可以使用“原生指针”?
现在我在ref类中使用本机指针,因为我的c ++文件也用于编译托管C ++。但有时我在WinRT中会遇到奇怪的行为并认为它可能与ComPtr有关。
答案 0 :(得分:3)
没有必要使用,但通常非常方便。
它是COM对象的引用计数智能指针,用于管理COM对象的生命周期。如果使用原始指针,则通常无法保证COM对象仍处于活动状态。如果您认为这可能与您的问题有关(例如,在调用COM方法时遇到访问冲突),那么使用它们是有意义的。无论如何,引用计数的性能损失与COM方法调用无关。