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

shared_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

shared_array class template

Обсуждениеshared_arrayшаблон класса хранит указатель на динамически выделенный массив. (Динамически выделенный массив выделен с помощью C++)Новый []Выражение. Указанный объект гарантированно удаляется, когда последнийshared_array, указывающий на него, уничтожается или сбрасывается.

КаждыйподелитсясоответствуетCopyConstructibleиПрименимыетребования Стандартной библиотеки C++, и поэтому могут использоваться в стандартных библиотечных контейнерах. Операторы сравнения поставляются таким образом, чтобыshared_arrayработал с ассоциативными контейнерами стандартной библиотеки.

Обычноshared_arrayне может правильно удерживать указатель на объект, который был выделен с не-array формойнового. См.shared_ptrдля этого использования.

Поскольку реализация использует подсчет ссылок, циклыэкземпляров shared_arrayне будут восстановлены. Например, еслиmain()удерживаетshared_arrayдоA, который прямо или косвенно удерживаетshared_arrayобратно доA,Aколичество использования будет 2. Уничтожение оригиналаshared_arrayоставитAболтающимся с количеством использования 1.

shared_ptrtostd::vectorявляется альтернативойshared_array, который немного тяжелее, но гораздо более гибкий.

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

Synopsis

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

Members

element_type

typedef T element_type;

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

constructors

explicit shared_array(T * p = 0);

Конструируетshared_array, сохраняя копиюp, которая должна быть указателем на массив, который был выделен через C++новый []выражение или быть 0. После этогочисло использованияравно 1 (даже если p == 0; см.~shared_array). Единственным исключением, которое может быть брошено этим конструктором, являетсяstd::bad_alloc. Если же в них есть что-то общее, то,.

template<class D> shared_array(T * p, D d);

Построенshared_array, хранящий копиюpиd. После этогоиспользовать счетявляется 1.DКопировал конструктор и разрушитель не должен бросать. Когда приходит время удалить массив, на который указываетp, объектdиспользуется в утвержденииd(p). Ссылка на объектdс параметромpтаким образом не должна бросаться. Единственным исключением, которое может быть брошено этим конструктором, являетсяstd::bad_alloc. Если же в этом случае речь идет о,.

shared_array(shared_array const & r); // never throws

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

destructor

~shared_array(); // never throws

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

assignment

shared_array & operator=(shared_array const & r); // never throws

Конструирует новыйshared_array, как описановыше, затем заменяет этотshared_arrayна новый, уничтожая замененный объект.

reset

void reset(T * p = 0);

Конструирует новыйshared_array, как описановыше, затем заменяет этотshared_arrayна новый, уничтожая замененный объект. Единственным исключением, которое может быть брошено, являетсяstd::bad_alloc. Если же в этом случае возникает необходимость, то.

template<class D> void reset(T * p, D d);

Конструирует новыйshared_array, как описановыше, затем заменяет этотshared_arrayна новый, уничтожая замененный объект.Dконструктор копий не должен бросать. Единственным исключением, которое может быть брошено, являетсяstd::bad_alloc. Если же выпадает исключение, тоd(p)вызывается.

indexing

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

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

get

T * get() const; // never throws

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

unique

bool unique() const; // never throws

Возвращается истинным, если ни один другойshared_arrayне является совместной собственностью хранимого указателя, ложным в противном случае.Tне обязательно должен быть полным типом. Умный указательОбщие требования.

use_count

long use_count() const; // never throws

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

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

conversions

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

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

swap

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

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

Free Functions

comparison

template<class T>
  bool operator==(shared_array<T> const & a, shared_array<T> const & b); // never throws
template<class T>
  bool operator!=(shared_array<T> const & a, shared_array<T> const & b); // never throws
template<class T>
  bool operator<(shared_array<T> const & a, shared_array<T> const & b); // never throws

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

Оператор<перегрузка обеспечивается для определения порядка так, чтобыshared_arrayобъекты могли использоваться в ассоциативных контейнерах, таких какstd::map. В реализации используетсяstd::lessдля выполнения сравнения. Это гарантирует, что сравнение обрабатывается правильно, поскольку стандартные мандаты, что реляционные операции на указателях не определены (5.9 [expr.rel] параграф 2), ноstd::less<>на указателях, четко определены (20.3.3 [lib.comparisons] пункт 8).

swap

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

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


$Date$

Авторское право 1999 Грег Колвин и Беман Доуз. Авторское право 2002 Дарин Адлер. Авторское право 2002-2005 годы Питер Димов. Распространяется под лицензией Boost Software License, версия 1.0. См. сопроводительный файлLICENSE_1_0.txtили копию наhttp://www.boost.org/LICENSE_1_0.txt

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




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



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


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:07:30/0.0044140815734863/0