Поскольку создание указателя при копировании тривиально, здесь принимается решение не о том, лучше или нет лучше хранить указатели, а о том, что лучше для ваших нужд.
Если вам действительно нужно сделать много случайных вставок (и удалить?), Тогда list
может работать лучше, хотя это не простое решение - возможно, даже vector
с зарезервированным пространством будет предпочтительнее, даже тогда. Вы хотите, чтобы издержки на узел list
просто сохраняли указатель? В 32-битной Windows это 12 байт на запись в list
, плюс накладные расходы на управление кучей, в общей сложности 20+ байт на запись. Это также не помогает локализации данных с течением времени. Между тем, vector
использует четыре байта на запись (опять же на 32-битной) и гарантированно хранит свои элементы в непрерывном блоке.
Вам придется иметь дело с очисткой памяти при erase
/ clear
/ уничтожении контейнера в любом случае, если только вы не заключите элемент указателя в какой-то умный указатель. Альтернативой для упрощения управления памятью ваших Some*
является один из контейнеров Boost pointer .
См. Также здесь для некоторого анализа list
, vector
и deque
. Лично я все чаще придерживаюсь мнения, что list
не очень полезен в мейнстриме.