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

时间:2010-12-23 04:16:49

标签: c++ visual-c++ com directx

如果我有以下内容:

ID3D11Buffer **buffers;    //ID3D11Buffer is a com object
buffers=new ID3D11Buffer* [num];

然后,如果我这样做:

delete[] buffers;
是否会自动调用每个Release()的{​​{1}}方法,还是我必须自己调用它?

< / p>

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:8)

所有delete[] buffers;将释放包含指向COM对象的指针的数组。您需要手动遍历数组并Release()每个数组。