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