スマート ポインターを使用できない (おそらく古いコードを処理している) 可能性がある非常にまれなケースがいくつかありますが、単純な「所有権」スキームも使用できません。
std::vector<whatever*>
といくつかのポインターwhatever*
が同じオブジェクトを指しているとします。安全なクリーンアップには、同じものを 2 回削除しないようにすることが含まstd::set<whatever*>
れます。そのため、作成しながら を作成し、まだセットに含まれていないポインターのみを削除します。ポイントされたすべてのオブジェクトが削除されたら、両方のコンテナも安全に削除できます。
からの戻り値をinsert
使用して、挿入されたアイテムが新しいかどうかを判断できます。私は以下をテストしていません(または std::set をしばらく使用していません)が、次は正しいと思います...
if (myset.insert (pointervalue).second)
{
// Value was successfully inserted as a new item
delete pointervalue;
}
もちろん、これが必要になるようにプロジェクトを設計するべきではありませんが、回避できない場合でも、状況に対処するのはそれほど難しくありません。