shared_ptr Утверждение px! = 0 не удалось

Когда выражение == используется для выражения типа object, оно будет разрешено System.Object.ReferenceEquals .

Equals является всего лишь методом virtual и ведет себя как таковой, поэтому будет использоваться переопределенная версия (которая для типа string сравнивает содержимое).

30
задан Horacio 22 August 2010 в 10:48
поделиться

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 , что приводит к хаосу. Это очень сложно решить, но в этом случае у вас будет ненулевой указатель. Это не то, что сейчас происходит с вами.

36
ответ дан 28 November 2019 в 00:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: