Каждый раз, когда мне нужно добавить динамически выделенный объект в вектор, я делал это следующим образом:
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
Но проблема в том, что новый способ многословен, утомителен, и я вижу, что никто его не делает. (По крайней мере, не рядом со мной ...)
Я должен пойти по-новому?
Или я могу просто придерживаться старого способа?
Или есть лучший способ сделать это?