Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

checked_delete

Boost , Chapter 1. Boost.Core , Chapter 1. Boost.Core

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Authors

  • Беман Доуз
  • Дэйв Абрахамс
  • Владимир Прус
  • Райнер Дейк
  • Джон Мэддок

Заголовок<<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>, инстанцируется с неполным типом. Это часто может привести к молчанию, трудно отслеживать неудачи.

Поставляемые шаблоны функций и классов могут использоваться для предотвращения этих проблем, поскольку они требуют полного типа и вызывают ошибку компиляции в противном случае.

namespace boost
{
    template<class T> void checked_delete(T * p);
    template<class T> void checked_array_delete(T * p);
    template<class T> struct checked_deleter;
    template<class T> struct checked_array_deleter;
}
  • Требуется:<T>должен быть полный тип. Выражение<delete p>должно быть хорошо сформировано.
  • Эффекты:<delete p;>
  • Требует:<T>должен быть полный тип. Выражение<delete []p>должно быть хорошо сформировано.
  • Эффекты:<delete []p;>
template<class T> struct checked_deleter
{
    typedef void result_type;
    typedef T * argument_type;
    void operator()(T * p) const;
};
  • Требуется:<T>должен быть полный тип. Выражение<delete p>должно быть хорошо сформировано.
  • Эффекты:<delete p;>
template<class T> struct checked_array_deleter
{
    typedef void result_type;
    typedef T * argument_type;
    void operator()(T * p) const;
};
  • Требует:<T>должен быть полный тип. Выражение<delete []p>должно быть хорошо сформировано.
  • Эффекты:<delete []p;>

Шаблоны функций<checked_delete>и<checked_array_delete>первоначально были частью<<boost/utility.hpp>>, и документация признала Бемана Доуса, Дэйва Абрахамса, Владимира Пруса, Райнера Дейка, Джона Мэддока и других в качестве авторов.


PrevUpHomeNext

Статья checked_delete раздела Chapter 1. Boost.Core Chapter 1. Boost.Core может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 1. Boost.Core ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:19:25/0.0067400932312012/0