Я динамически загружаю библиотеку на C ++, как описано здесь.
Мой абстрактный базовый класс выглядит так:
#include <boost/ptr_container/ptr_list.hpp>
class Base {
public:
virtual void get_list(boost::ptr_list<AnotherObject>& list) const = 0;
};
И моя библиотека теперь предоставляет производный класс Derived
class Derived : public Base { ... };
void Derived::get_list(boost::ptr_list<AnotherObject& list) const {
list.push_back(new AnotherObject(1));
list.push_back(new AnotherObject(2));
}
и create и destroy функции
extern "C" {
Base* create() { new Derived; }
destroy(Base* p) { delete p; }
}
Моя клиентская программа загружает библиотеку и две функции create и destroy. Затем он создает экземпляр Derived и использует его:
Base* obj = create();
boost::ptr_list<AnotherObject> list;
obj->get_list(list);
Теперь моя проблема: когда список заполняется библиотекой, вызывается new библиотеки для создания AnotherObjects. С другой стороны, когда список уничтожается, вызывается delete клиента для уничтожения AnotherObject. Что я могу сделать, чтобы избежать этой проблемы?