Я динамически загружаю библиотеку в 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
вызывается для создания AnotherObject
s. С другой стороны, когда список уничтожен, клиент delete
вызывается для уничтожения AnotherObject
s. Что я могу сделать, чтобы избежать этой проблемы?