2012-03-08 25 views
1

これは愚かな質問ですが、私はこれをどのように達成するか考えていません。C++でポインタを移動するにはどうすればよいですか?

私はオブジェクトとベクトルを持っています。実行中の設定された時間に、私はこのオブジェクトをベクトルに入れ、このオブジェクトを新しいオブジェクトで上書きする必要があります。私は現在、これを持って、私はいくつかの理由は、ポインタ関連の理由で間違っていると仮定し

std::vector<Cube*> cubes; 
Cube* workingCube = new Cube(); 
... 
cubes.insert(cubes.begin(), workingCube); 
workingCube = new Cube(); 

。私はこれを正しく行う方法を理解することはできません。

std::vector<Cube> cubes; 

Cube workingCube; 
cubes.insert(cubes.begin(), workingCube); 
workingCube = Cube(); 

場合Cubeをすることができます容器にstd::move(workingCube)ではなく、移動にコピーするには高価しかし安いです:私たちは、ポインタと明示的な動的な割り当てを避ける場合

+0

新しいプレースメントを使用できますが、これは悪いデザインです。たぶん、スマートなポインタが根本的な問題を解決することができます。 – BatchyX

+0

@CarlNorum私の一部のタイプミスのビットが修正されました。 – Valyrion

+0

@BatchyX:新しい配置がどのように質問に関連しているのか見当たりません。 –

答えて

10

それは多くのクリーナーとはるかに少ない漏れが発生しやすいのです。 Cubeが移動してコピーするのに高価な場合は、std::unique_ptr<Cube>を使用してコンテナに移動します。

自分のものに生ポインタを使用しないでください

1

どのポインタがオブジェクトを所有しているか、つまりオブジェクトがもはや必要でなくなったときに誰がそのオブジェクトを所有しているのかを常に覚えている限り、何も問題はありません。あなたの場合は、所有するポインタをベクトルに転送し、ある時点で、ベクトル内のすべてのポインタを削除する必要があります。

関連する問題