Заголовок<<boost/checked_delete.hpp>
>определяет два шаблона функций<checked_delete
>и<checked_array_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>
>, и документация признала Бемана Доуса, Дэйва Абрахамса, Владимира Пруса, Райнера Дейка, Джона Мэддока и других в качестве авторов.