#ifndef comet_com_ptr_array_h__ #define comet_com_ptr_array_h__ #include #include namespace comet { template class com_ptr_array { public: com_ptr_array() : _ptr(nullptr), _count(0) {} ~com_ptr_array() { clear(); } TInf** in() { return _ptr.in(); } TInf*** inout() { return _ptr.inout(); } TInf*** out() { clear(); return _ptr.out(); } TCount count() { return _count; } TCount* inout_count() { return &_count; } TCount* out_count() { clear(); return &_count; } com_ptr operator[](size_t i) { return com_ptr(_ptr[i]); } private: void clear() { if (_ptr) { for (DWORD i = 0; i < _count; i++) { _ptr[i]->Release(); } _count = 0; _ptr.free(); } } task_ptr _ptr; TCount _count; }; } #endif // comet_com_ptr_array_h__