Заголовок <boost/checked_delete>
определяет два шаблона функций, checked_delete
и checked_delete
и два шаблона классов, checked_deleter
и checked_array_deleter
.
C++ Стандарт позволяет в пункте 5.3.5/5 удалять указатели неполных типов классов с помощью выражения удаления. Когда класс имеет нетривиальный деструктор, или оператор класса удаляет, поведение не определено. Некоторые компиляторы выдают предупреждение при удалении неполного типа, но, к сожалению, не все это делают, и программисты иногда игнорируют или отключают предупреждения.
Особенно неприятный случай, когда деструктор умного указателя, такой как boost::scoped_ptr<T>:::~scoped_ptr
, инстанцирован с неполным типом. Это часто может привести к молчанию, трудно отслеживать неудачи.
Поставляемые шаблоны функций и классов могут использоваться для предотвращения этих проблем, поскольку они требуют полного типа и вызывают ошибку компиляции в противном случае.
Шаблоны функций checked_delete
и checked_array_delete
изначально были частью <boost/utility.hpp>
, и документация признала Бемана Доуса, Дэйва Абрахамса, Владимира Пруса, Райнера Дейка, Джона Мэддока и других в качестве авторов.