是 - > Release()调用COM对象的析构函数?

Mar*_*ark 2 c++ com directx visual-c++

如果我有以下内容:

ID3D11Buffer **buffers;    //ID3D11Buffer is a com object
buffers=new ID3D11Buffer* [num];
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

delete[] buffers;
Run Code Online (Sandbox Code Playgroud)Release()每一个方法ID3D11Buffer*被自动调用,或者我要叫他们自己?

Mar*_*som 9

调用delete数组会破坏数组的每个元素.但由于每个元素都是一个POD哑指针,因此破坏它不会做任何事情.如果希望自动释放COM对象,则应使用智能指针,如_com_ptr_tCComPtr.


Ada*_*ras 8

所有delete[] buffers;这些都是免费的包含指向COM对象的指针的数组.你需要Release()手动遍历数组和每个数组.