В общем, какой бы тип ни хранился в векторе, его экземпляры могут быть скопированы. Это означает, что если вы сохраняете std::string, экземпляры std::string будут скопированы.
Например, когда вы вставляете тип в вектор, экземпляр типа копируется в экземпляр, размещенный внутри вектора. Копирование указателя будет дешевым, но, как указал Конрад Рудольф в комментариях, это не должно быть единственным, что вы должны учитывать.
Для простых объектов, таких как ваш Test
, копирование будет настолько быстрым, что это не будет иметь значения.
Кроме того, в C++11 перемещение позволяет избежать создания дополнительной копии, если она не нужна.
Итак, вкратце: указатель будет скопирован быстрее, но копирование — не единственное, что имеет значение. Я бы сначала беспокоился о поддерживаемом, логическом коде и производительности, когда это становится проблемой (или ситуация требует этого).
Что касается вашего вопроса о векторе внутреннего указателя, нет, векторы реализованы в виде массивов, размер которых при необходимости периодически изменяется. Вы можете найти реализацию вектора GNU libc++ в Интернете.
Ответ становится намного сложнее на уровне ниже C++. Указатели, конечно, должны быть задействованы, так как вся программа не может поместиться в регистры. Я недостаточно знаю об этом низком уровне, чтобы подробнее остановиться на этом.
person
Corbin
schedule
29.06.2012