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

intrusive_ref_counter

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

basic_intrusive_ref_counter class template

Введение
Синопсис
Члены

Introduction

Intrusive_ref_counterшаблон класса реализует счетчик ссылок для класса производного пользователя, который предназначен для использования сintrusive_ptr. Базовый класс ассоциировалintrusive_ptr_add_refиintrusive_ptr_releaseфункции, которые изменяют счетчик ссылок по мере необходимости и уничтожают объект пользователя, когда счетчик падает до нуля.

Шаблон класса параметризован попараметрам DerivedTиCounterPolicyT. Первым параметром является класс пользователя, который происходит отintrusive_ref_counter. Этот тип необходим для того, чтобы правильно уничтожить объект, когда на него не осталось ссылок.

Второй параметр — это политика, определяющая характер эталонного счетчика. Повышаю. SmartPtr предоставляет две такие политики:thread_unsafe_counterиthread_safe_counter. Первый предписывает базовому классуintrusive_ref_counterиспользовать счетчик, подходящий только для однопоточного использования. Указатели на один объект, который использует этот тип счетчика ссылок, не должны использоваться в разных потоках. Последняя политика делает эталонный счетчик потока безопасным, если целевая платформа не поддерживает резьбу. Поскольку в современных системах поддержка резьбы распространена, по умолчанию встречная политика являетсяthread_safe_counter.

Synopsis

namespace boost {
  struct thread_unsafe_counter;
  struct thread_safe_counter;
  template<class DerivedT, class CounterPolicyT = thread_safe_counter>
  class intrusive_ref_counter
  {
  public:
      intrusive_ref_counter() = noexcept;
      intrusive_ref_counter(intrusive_ref_counter const & r) = noexcept;
      intrusive_ref_counter & operator=(intrusive_ref_counter const & r) noexcept;
      unsigned int use_count() const noexcept;
  protected:
      ~intrusive_ref_counter() = default;
  };
}

Members

constructors

intrusive_ref_counter();

Пост-условия:<use_count() == 0>.

Бросает:ничего.

Примечания:Ожидается, что указатель на построенный объект будет переданintrusive_ptrконструктору, оператору присвоения илиметоду сброса () [41), который увеличит счетчик отсчета.

intrusive_ref_counter(intrusive_ref_counter const &);

Пост-условия:<use_count() == 0>.

Бросает:ничего.

Примечания:Ожидается, что указатель на построенный объект будет переданintrusive_ptrконструктору, оператору присвоения илиметоду сброса () [41), который увеличит счетчик отсчета.

destructor

~intrusive_ref_counter();

Бросает:ничего.

Эффекты:Уничтожает встречный объект.

Примечания:Деструктор защищен таким образом, что объект может быть уничтожен только через классDerivedT.

assignment

intrusive_ref_counter & operator=(intrusive_ref_counter const & r) noexcept;

Эффекты:Ничего не делает, счетчик ссылок не изменяется.

Возвращение:<*this>.

use_count

unsigned int use_count() const noexcept;

Возвращение:Текущее значение счетчика отсчета.

Бросает:ничего.

Примечания:Возвращенное значение может не быть действительным в многопоточных приложениях.


$Date$

Авторское право и копия; 2013 Андрей Семашев. Распространяется под лицензией Boost Software License, версия 1.0. См. сопроводительный файлLICENSE_1_0.txtили копию наhttp://www.boost.org/LICENSE_1_0.txt

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




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



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


реклама


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

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