CPtrArray без MFC (для STL или Boost) - PullRequest
       3

CPtrArray без MFC (для STL или Boost)

1 голос
/ 22 августа 2011

Я пытаюсь покинуть MFC, как мне заменить CPtrArray ?

возможно я могу typedef что-то похожее vector<void *>

Какой лучший способ сохранить полный функционал этого класса?

спасибо.

Ответы [ 2 ]

4 голосов
/ 22 августа 2011

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

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

(Если вам известны все проблемы, связанные с CPtrArray, тогда я прошу прощения за проповедь хору, но я подумал, что для любого вопроса по поводу CPtrArray нужна прикрепленная записка с предупреждением.)

1 голос
/ 22 августа 2011

Не нужно писать самостоятельно, вместо этого вы можете использовать boost::ptr_array. Он использует базовый std::vector<void*> для хранения указателей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...