1つ目は非ポインタオブジェクトを追加し、2つ目はベクトルへのポインタを追加します。したがって、それはすべて、どちらを実行するかについてのベクトルの宣言に依存します。
あなたの場合、あなたはとして宣言objects
してstd::vector<DrawObject>
いるので、最初のものは機能し、objects
タイプのアイテムを保存することができますがDrawObject
、ではありませんDrawObject*
。
C ++ 11では、次のように使用できますemplace_back
。
objects.emplace_back(name, surfaceFile, xPos, yPos,
willMoveVar, animationNumber);
違いに注意してください。と比較してください:
objects.push_back(DrawObject(name, surfaceFile, xPos, yPos,
willMoveVar, animationNumber));
を使用emplace_back
すると、呼び出しサイトでオブジェクトを作成せず、代わりに引数をvectorに渡し、vectorが内部でオブジェクトを作成します。場合によっては、これはより高速になる可能性があります。
emplace_backに関するドキュメントを読んでください(私のものを強調してください)、
コンテナの最後に新しい要素を追加します。要素はインプレースで構築されます。つまり、コピーまたは移動操作は実行されません。要素のコンストラクターは、関数に提供されるのとまったく同じ引数で呼び出されます。
コピーや移動を回避するため、結果のコードは少し速くなる可能性があります。