動的に割り当てられたオブジェクトをベクターに追加する必要があるときはいつでも、次の方法でそれを行ってきました。
class Foo { ... };
vector<Foo*> v;
v.push_back(new Foo);
// do stuff with Foo in v
// delete all Foo in v
それはうまくいっただけで、他の多くの人も同じことをしているようです。
今日、vector::push_back が例外をスローできることを学びました。つまり、上記のコードは例外セーフではありません。:-(だから私は解決策を思いついた:
class Foo { ... };
vector<Foo*> v;
auto_ptr<Foo> p(new Foo);
v.push_back(p.get());
p.release();
// do stuff with Foo in v
// delete all Foo in v
しかし、問題は、新しい方法が冗長で退屈であり、誰もそれを行っていないことです。(少なくとも私の周りでは…)
私は新しい道を歩むべきですか?
それとも、昔のやり方のままでいられますか?
または、それを行うより良い方法はありますか?