1
我最近經歷了用C++ 11智能指針取代所有原始指針的過程,現在我終於完成了DirectX長指針的例外。針對directx的C++智能指針
我想相處的實施以下線的東西:
std::shared_ptr<IDirect3D9> p_d3d;
p_d3d(Direct3DCreate9(D3D_SDK_VERSION), [](IDirect3D9 *p) {//smart pointer initialization(1)
p->Release();
});
我越來越從Visual Studio以下錯誤:
錯誤:的對象的通話沒有合適的類型 運算符()或轉換函數指針函數類型
我寧願使用std :: un ique_ptr或std :: shared_ptr比CComPtr。 關於爲什麼會發生這種情況以及可能的實施方法的任何想法?
初始化是在聲明變量時完成的。 – chris
C++智能指針不支持COM對象依賴的ref-counting語義。建議您使用COM智能指針。具有兩個競爭參考計數方案的 – IInspectable
不是一個好主意。特別是對於你想要的方案,當你有一組指向它的智能指針時,被引用的對象可以被銷燬。而是建立自己的COM智能指針。如果您使用Boost庫,則可以使用boost :: intrusive_ptr來保存一些工作(如果我正確地記住它的名稱)。不幸的是,構建塊沒有被採用到C++ 11標準中。 –