У меня есть компонент компонента ATL COM, который принимает BSTR как параметр in. Мне нужно добавить каждый вызов этого метода в массив. Я не могу использовать SAFEARRAY, поскольку это фиксированный размер, поэтому я думал, что std :: vector будет самым простым выбором. Конечно, мне нужно будет вызвать SysAllocString для каждого добавления к вектору. Это означает, что SysFreeString нужно вызывать для каждой записи до того, как вектор будет уничтожен.Сохранить BSTR в std :: vector?
Я искал более легкое/более чистое решение и думал об объявлении вектора как вектора < _bstr_t> который включал бы автоматическую очистку. Тем не менее, что-то в глубине моего сознания поднимает тревогу, удерживая то, что эффективно является умным указателем в стандартном контейнере. Оправдываются ли мои опасения или могу ли я сделать это безопасно? Если нет других хороших решений?
Но не _bstr_t только тип смарт-указатель? Или конкретно, что вы не должны ставить auto_ptr? Если да, почему именно это вы не должны ставить auto_ptr? Я прочитал это в какой-то момент, но я не могу вспомнить, почему это было сейчас. – Jonnster
auto_ptr имеет «странную» семантику копирования, но для контейнеров std требуется несколько стандартная семантика копирования и назначения. У ссылок подсчета интеллектуальных указателей обычно есть такая семантика. – ltjax
aalways предпочитают unique_ptr для shared_ptr –