Изменение в феврале 2002 года на интеллектуальные указатели Boost внесло ряд изменений. Поскольку предыдущая версия умных указателей использовалась в течение длительного времени, полезно иметь подробный список того, что изменилось с точки зрения пользователя библиотеки.
Обратите внимание, что для компиляторов, которые недостаточно хорошо поддерживают шаблоны участников, используется отдельная реализация, которая не имеет многих новых функций и больше похожа на старую версию.
Features Requiring Code Changes to Take Advantage
Умные шаблоны класса указателей теперь имеют свой собственный файл заголовка. Для совместимостиHeader теперь включает в себя заголовки для четырех классических шаблонов класса умных указателей.
Добавлен шаблонweak_ptr.
Новыйshared_ptrиshared_arrayослабить требование о том, чтобы деструктор заостренного объекта был виден при инстанцировании деструктораshared_ptr. Это облегчает совместное использование членов ptr в классах без явных деструкторов.
При созданииshared_ptrилиshared_array может быть передан пользовательский распределитель..
shared_static_castиshared_dynamic_castпредставлены шаблоны функций, которые работают дляshared_ptrиweak_ptr, какstatic_castиdynamic_castдля указателей.
Недостаток самоназначения был удален изshared_ptr::reset, хотя он все еще присутствует вscoped_ptrи вstd::auto_ptrВызовсбросас указанием на объект, который уже принадлежитshared_ptr, приводит к неопределенному поведению (утверждение или в конечном итоге двойное удаление, если утверждения выключены).
BOOST_SMART_PTR_CONVERSIONУдалена функция.
shared_ptrтеперь разрешено.
Features That Improve Robustness
Манипуляции с использованием теперьбезопасны для потоковна Windows, Linux и платформах, поддерживающих pthreads. См.файл для деталей
Новый файл shared_ptr всегда удаляет объект, используя указатель, с которым он был изначально построен. Это предотвращает тонкие проблемы, которые могут возникнуть, если последнийshared_ptrбыл указателем на подобъект класса, у которого не было виртуального разрушителя.
Implementation Details
Некоторые ошибки в реализациях оператора присваивания и всбросебыли исправлены с помощью идиомы «копирование и своп».
Для проверки предварительных условий различных функций были добавлены утверждения; однако, поскольку они используют новый заголовок, утверждения по умолчанию отключены.
Частичная специализацияstd::lessбыла замененаоператором<перегрузки, которые выполняют то же самое, не полагаясь на неопределенное поведение.
Неправильная перегрузкаstd::swapбыла замененаboost::swap, который имеет много одинаковых преимуществ для общего программирования, но не нарушает стандарт C++.
Статья Smart Pointer Changes раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.