вызывается -> Release () для деструктора COM-объектов? - PullRequest
2 голосов
/ 23 декабря 2010

Если у меня есть следующее:

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

Тогда, если я сделаю это:

delete[] buffers;
Будет ли метод Release() каждого ID3D11Buffer* вызываться автоматически, или я должен вызывать их сам

Ответы [ 2 ]

9 голосов
/ 23 декабря 2010

Вызов delete для массива уничтожит каждый элемент массива.Но так как каждый элемент является тупым указателем POD, его уничтожение ничего не дает.Если вы хотите, чтобы COM-объекты освобождались автоматически, вы должны использовать умный указатель, такой как _com_ptr_t или CComPtr .

8 голосов
/ 23 декабря 2010

Все, что сделает delete[] buffers;, это освободит массив, содержащий указатели на объекты COM.Вам нужно перебрать массив и Release() каждый из них вручную.

...