Нет, ничего не будет скопировано; Разыменование просто говорит C ++, что вы хотите вызвать оператор [] для вектора , а не для вашего указателя , vecPtr
. Если вы не разыменовываете, C ++ попытается найти оператор [], определенный для типа std::vector<int>*
.
Это может привести к путанице, поскольку operator[]
определено для всех типов указателей, но это равносильно смещению указателя, как если бы он указывал на массив vector<int>
. Если вы действительно выделите там только один вектор, то для любого индекса, отличного от 0
, выражение оценивается как ссылка на мусор, так что вы получите либо segfault, либо что-то, чего не ожидали.
В общем, доступ к векторам через указатель является проблемой, а синтаксис (*vecPtr)[index]
неудобен (но лучше, чем vecPtr->operator[](index)
). Вместо этого вы можете использовать:
vecPtr->at(index)
Это фактически проверяет диапазоны, в отличие от operator[]
, поэтому, если вы не хотите платить цену за проверку, находится ли индекс в границах, вы застряли с (*vecPtr)[]
.