Вы не должны были использовать CPtrArray в первую очередь. Это опасный старый класс с мрачных дней до того, как Visual C ++ поддерживал шаблоны, и его можно использовать только с огромной осторожностью. Его проблема в том, что он хранит указатели (любой указатель!) Как void*
, и это означает, что когда вы возвращаете указатель из массива, у вас нет никакой информации о типе . Если ваш код сильно зависит от этого, вы рискуете неправильно использовать объекты и иметь серьезные утечки памяти (например, не вызывать деструкторы).
boost::ptr_array
не является прямой заменой CPtrArray
, это правильно настроенный типочувствительный класс: его ближайший эквивалент MFC будет CArray<T>
. Тот факт, что он использует void*
для обработки указателей, является (по существу) деталью реализации, и совсем не то же самое, что непосредственное использование vector<void*>
.
(Если вам известны все проблемы, связанные с CPtrArray
, тогда я прошу прощения за проповедь хору, но я подумал, что для любого вопроса по поводу CPtrArray
нужна прикрепленная записка с предупреждением.)