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

scoped_array

Boost , ,

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

scoped_array class template

Шаблон класса scoped_array хранит указатель на динамически распределенный массив. (Динамически распределенные массивы распределены с помощью C++ new[]. Направленный массив гарантированно удаляется либо при разрушении scoped_array, либо через явный reset.

Шаблон scoped_array является простым решением для простых потребностей. Он обеспечивает базовое «приобретение ресурсов - инициализация», без семантики совместного владения или передачи собственности. Как его название, так и исполнение семантики (будь то некопируемой) сигнализируют о его намерении сохранить право собственности исключительно в пределах текущего объема. Поскольку он некопируемый, он безопаснее shared_array для указателей, которые не должны быть скопированы.

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

Он не может использоваться в стандартных библиотечных контейнерах C++. См. shared_array, если scoped_array не соответствует вашим потребностям.

Он не может правильно держать указатель на один объект. См. scoped_ptr для этого использования.

std::vector является альтернативой scoped_array, которая является немного более тяжелой, но гораздо более гибкой. A boost::array - это альтернатива, которая не использует динамическое распределение.

Шаблон класса параметризирован на T, тип объекта, на который указывают. T должен соответствовать умному указателю общим требованиям.

Synopsis

namespace boost {
  template<class T> class scoped_array : noncopyable {
    public:
      typedef T element_type;
      explicit scoped_array(T * p = 0); // never throws
      ~scoped_array(); // never throws
      void reset(T * p = 0); // never throws
      T & operator[](std::ptrdiff_t i) const; // never throws
      T * get() const; // never throws
     
      operator unspecified-bool-type() const; // never throws
      void swap(scoped_array & b); // never throws
  };
  template<class T> void swap(scoped_array<T> & a, scoped_array<T> & b); // never throws
}

Members

element_type

typedef T element_type;

Предоставляет тип сохраненного указателя.

constructors

explicit scoped_array(T * p = 0); // never throws

Конструкция scoped_array, хранение копии p, которая должна быть выделена через C++ new[] выражение или быть 0.T не требуется полный тип. См. умный указатель общие требования.

destructor

~scoped_array(); // never throws

Исключает массив, указанный сохраненным указателем. Обратите внимание, что delete [] на указателе с значением 0 безвреден. Гарантия того, что это не бросает исключений, зависит от требования, что деструкторы объектов удаленного массива не выбрасывают исключений. См. умный указатель общие требования.

reset

void reset(T * p = 0); // never throws

Исключает массив, на который указывает сохраненный указатель, а затем сохраняет копию p, которая должна быть выделена через C++ new [] выражение или быть 0. Гарантия того, что это не бросает исключений, зависит от требования, чтобы деструкторы объектов удаленного массива не бросали исключений. См. умный указатель общие требования.

subscripting

T & operator[](std::ptrdiff_t i) const; // never throws

Description Поведение не определено и почти наверняка нежелательно, если сохраненный указатель равен 0, или если i меньше 0 или больше или равно количеству элементов в массиве.

get

T * get() const; // never throws

Возвращает сохраненный указатель. T не должен быть полным типом. См. умный указатель общие требования.

conversions

operator unspecified-bool-type () const; // never throws

Возвращает неопределенное значение, которое при использовании в булевых контекстах эквивалентно get()!= 0.

swap

void swap(scoped_array & b); // never throws

Обменивается содержанием двух умных указателей. T не должен быть полным типом. См. умный указатель общие требования.

Free Functions

swap

template<class T> void swap(scoped_array<T> & a, scoped_array<T> & b); // never throws

Эквивалент a.swap(b). Соответствует интерфейсу std::swap. Предоставляется в качестве помощи для общего программирования.


долл. США

Copyright 1999 Грег Колвин и Беман Доус. Авторское право 2002 Darin Adler. Copyright 2002-2005 Питер Димов. Distributed under the Boost Software License, Version 1.0. LICENSE_1_0.txt или копия на http://www.boost.org/LICENSE_1_0.txt.

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




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



:: Главная :: ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 19:58:30/0.028263092041016/1