Я пытаюсь сохранить объекты в контейнере stl (в данном случае в векторе) и хочу, чтобы контейнер уничтожил объекты при его уничтожении, но я не могу понять детали.
Один из способов, которым я не хочу это делать, это просто использовать его как
vector<MyClass> myVec;
myVec.push_back(MyClass(...));
из-за того, что конструктор здесь вызывается дважды (один раз в коде выше, затем копировать конструктор в векторе) и деструктородин раз.
Наиболее прямой альтернативой является использование указателей для хранения динамически размещаемых объектов, но тогда деструктор MyClass не будет вызываться при уничтожении вектора.Хранение auto_ptr вместо обычных указателей дает ошибку в myVec.push_back (...) .
Есть ли способ избежать первого выбора при наличии деструктора контейнераназывать элементы деструктором?
Спасибо за ваши ответы!
РЕДАКТИРОВАТЬ
Рассмотреть аналогичную проблему;как реализовать контейнер, владеющий объектами, используя абстрактный базовый класс.Уникальный указатель (Boost's unique_ptr) не имеет конструкторов копирования, поэтому его нельзя использовать напрямую.
class A {}; // Abstract base class.
class B : public A {}; // Sub class.
...
vector<A *> vec;
vec.push_back(new B());
// At destruction of vec, destroy elements left in container.