Обработка исключений перед назначением scoped_ptr

Член моего класса является boost::scoped_ptr который установлен в (T*)0 когда объект создан. В классе есть init() метод, который фактически инициализирует умный указатель с новым объектом.

Однако, если выдается исключение до у того умного указателя есть допустимая ссылка, он очень неосмотрительно пытается удалить нуль (выпуск) или утверждает (отладка).

Как заставить его игнорировать нулевые указатели при уничтожении без изменения исходного исходного кода; и, если это невозможно, существует ли более подходящий альтернативный класс интеллектуальных указателей?

1

Решение

boost :: scoped_ptr фактически игнорирует нулевые указатели в своем деструкторе. boost :: scoped_ptr использует boost :: checked_delete () для удаления. boost :: checked_delete () использует обычный delete чтобы удалить (boost :: checked_delete () также проверяет, чтобы T не был неполным).

И вы можете удалить нулевые указатели с удалением (в отличие от free()). Вы уверены, что ошибка действительно в boost :: scoped_ptr?

1

Другие решения

Ты можешь попробовать std::unique_ptr вместо boost::scoped_ptr и предоставить пользовательскую функцию удаления, которая будет проверять состояние базового объекта — см. http://en.cppreference.com/w/cpp/memory/unique_ptr.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector