Не должно быть проблем с использованием boost::shared_ptr
, если вы правильно инициализируете ваши общие указатели и используете один и тот же контекст управления памятью для всех ваших библиотек общих объектов.
В вашем случае вы пытаетесь использоватьнеинициализированный общий указатель.
boost::shared_ptr<Obj> obj;
obj->Something(); // assertion failed
boost::shared_ptr<Obj> obj(new Obj);
obj->Something(); // ok
Я бы посоветовал инициализировать их прямо при объявлении, когда это возможно.Обработка исключений может создать множество «невидимых» путей для запуска кода, и может быть довольно сложно определить неинициализированные общие указатели.
PS: Существуют другие проблемы, если вы загружаете / выгружаете модули, где1009 * используются, что приводит к хаосу.Это очень трудно решить, но в этом случае у вас будет ненулевой указатель.Это не то, что происходит с тобой сейчас.