一般に、ベクトルに格納されている型が何であれ、そのインスタンスをコピーできます。これは、std::string を格納している場合、std::string のインスタンスがコピーされることを意味します。
たとえば、Type をベクターにプッシュすると、Type インスタンスはベクター内に格納されたインスタンスにコピーされます。ポインターのコピーは安価ですが、Konrad Rudolph がコメントで指摘したように、これだけを考慮する必要はありません。
のような単純なオブジェクトの場合Test
、コピーは非常に高速になるため問題ありません。
さらに、C++11 では、移動することで、不要な場合に余分なコピーを作成することを回避できます。
要するに、ポインターはより高速にコピーされますが、重要なのはコピーだけではありません。私は保守可能な論理コードを最初に心配し、それが問題になったとき (または状況がそれを必要とするとき) にパフォーマンスを心配します。
内部ポインタ ベクトルに関する質問については、いいえ、ベクトルは必要に応じて定期的にサイズ変更される配列として実装されます。GNU の libc++ 実装の vector をオンラインで見つけることができます。
C++ レベルよりも低いレベルでは、答えはさらに複雑になります。プログラム全体がレジスターに収まらないため、ポインターはもちろん関与する必要があります。私はそのレベルの低さについて詳しく説明するのに十分な知識がありません。