1

わかりました、C++ STL コンテナーを使用しています (現在はvector<customType*>)。ここでコンテナから要素を削除する必要がありますが、消去を使用するとオブジェクトが分解されます。これは悪いことです。なぜなら、オブジェクトを 1 つから取り出して、何らかの処理を行っている変数に配置してから別のオブジェクトに配置するからです。

現時点では、私のコードは非常に厄介です。コードを読み取った後、その場所に NULL を変数に入れ、if (Q[ii]NULL) continue を入れています。しかし、これはそれほど素晴らしいことではありません。

4

3 に答える 3

3

NULLポインターのコンテナーがある場合 ( 「消去された」要素に割り当てているため、そのように聞こえます)、コンテナーから要素を消去しても、ポイント先のオブジェクトは削除されません。あなたはそれを自分で行う責任があります。

オブジェクト (ポインタ以外のオブジェクト) のコンテナがある場合は、削除する前にコンテナから要素をコピーする必要があります。

于 2010-10-16T00:13:51.543 に答える
1

ベクトルを破壊せずに要素を実際に削除することはできません。ベクターにポインターが格納されている場合は、要素へのポインターを削除できますが、要素自体は実際には破棄されません。

于 2010-10-16T00:14:03.277 に答える
0

STL コンテナー操作には、コピー セマンティクスがあります。したがって、要素を追加または削除するたびに、それに応じてコンストラクタまたはデストラクタが呼び出されます (非プリミティブ型を想定)。また、その過程でベクトルのサイズが変更されると、すべてのオブジェクトがコピー構築され、元のオブジェクトは破棄されます。このすべてのコピーを回避する方法はありません。

オーバーヘッドを回避する唯一の方法は、オブジェクトの代わりに (スマート) ポインターのベクトルを使用することです。

于 2010-10-16T00:15:57.477 に答える