Карта сайта 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> определяет два шаблона функций, checked_delete и checked_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 должны быть полного типа. Выражение исключить p должен быть хорошо сформирован.
  • Последствия:Удалитьp;
  • Требования: T должны быть полного типа. Выражение удалить [] p должно быть хорошо сформировано.
  • Последствия:удалить[]p;
template<class T> struct checked_deleter
{
    typedef void result_type;
    typedef T * argument_type;
    void operator()(T * p) const;
};
  • Требования: T должны быть полного типа. Выражение исключить p должен быть хорошо сформирован.
  • Последствия:Удалитьp;
template<class T> struct checked_array_deleter
{
    typedef void result_type;
    typedef T * argument_type;
    void operator()(T * p) const;
};
  • Требования: T должны быть полного типа. Выражение удалить [] p должно быть хорошо сформировано.
  • Последствия:удалить[]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-07-05 11:36:01/0.0067288875579834/0