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

Class template shared_ptr

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Indexes and Reference

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

Class template shared_ptr

boost::interprocess::shared_ptr

Synopsis

// In header: <boost/interprocess/smart_ptr/shared_ptr.hpp>
template<typename T, typename VoidAllocator, typename Deleter> 
class shared_ptr {
public:
  // types
  typedef T                                                                                                                         element_type;           
  typedef T                                                                                                                         value_type;             
  typedef boost::intrusive::pointer_traits< typename VoidAllocator::pointer >::template rebind_pointer< T >::type                   pointer;                
  typedef unspecified                                                                                                               reference;              
  typedef unspecified                                                                                                               const_reference;        
  typedef boost::intrusive::pointer_traits< typename VoidAllocator::pointer >::template rebind_pointer< const Deleter >::type       const_deleter_pointer;  
  typedef boost::intrusive::pointer_traits< typename VoidAllocator::pointer >::template rebind_pointer< const VoidAllocator >::type const_allocator_pointer;
  // construct/copy/destruct
  shared_ptr();
  explicit shared_ptr(const pointer &, 
                      const VoidAllocator & = VoidAllocator(), 
                      const Deleter & = Deleter());
  shared_ptr(const shared_ptr &);
  shared_ptr(const shared_ptr &, const pointer &);
  template<typename Y> 
    shared_ptr(shared_ptr< Y, VoidAllocator, Deleter > const &);
  template<typename Y> 
    explicit shared_ptr(weak_ptr< Y, VoidAllocator, Deleter > const &);
  explicit shared_ptr(shared_ptr &&);
  template<typename Y> 
    shared_ptr & operator=(shared_ptr< Y, VoidAllocator, Deleter > const &);
  shared_ptr & operator=(BOOST_COPY_ASSIGN_REF(shared_ptr));
  shared_ptr & operator=(shared_ptr &&);
  // public member functions
  void reset();
  template<typename Pointer> 
    void reset(const Pointer &, const VoidAllocator & = VoidAllocator(), 
               const Deleter & = Deleter());
  template<typename Y> 
    void reset(shared_ptr< Y, VoidAllocator, Deleter > const &, 
               const pointer &);
  reference operator*() const;
  pointer operator->() const;
  pointer get() const;
  bool operator!() const;
  bool unique() const;
  long use_count() const;
  void swap(shared_ptr< T, VoidAllocator, Deleter > &);
};

Description

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

Shared_ptrпараметризуется на T (тип объекта, на который указывается), VoidAllocator (распределитель пустоты, который будет использоваться для распределения вспомогательных данных) и Deleter (удаляющее устройство, оператор() которого будет использоваться для удаления объекта).

Внутренний указатель будет иметь тот же тип указателя, что и имя типа VoidAllocator::pointer type (то есть, если имя типа VoidAllocator::pointer is offset_ptr, внутренний указатель будет offset_ptr).

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

shared_ptr public construct/copy/destruct

  1. shared_ptr;

    Построение пустогоshared_ptr. Use_count() == 0 && get()== 0.

  2. эксплицитныйshared_ptrconstуказатель&p,constVoidAllocator&a=VoidAllocator,constDeleter&d=Deleter];

    Конструируетshared_ptr, которому принадлежит указатель p. Вспомогательные данные будут выделены с копией a, а объект будет удален с копией d. Требования: Делитер и конструктор А не должны бросать.

  3. shared_ptrconstshared_ptr&r;

    Копия конструируетshared_ptr. Если r пуст, то образуется пустоеshared_ptr. В противном случае строитсяshared_ptr, который разделяет право собственности с r. Никогда не бросай.

  4. shared_ptrconstshared_ptr&other,constpointer&p;

    Конструируетshared_ptr, который разделяет право собственности с другими и магазинами p. Postconditions: get() == p&& use_count() == r.use_count(). Броски: ничего.

  5. шаблон<имя типаY>shared_ptrshared_ptr<YVoidAllocator,Deleter>const&r];

    Если r пуст, то образуется пустоеshared_ptr. В противном случае строитсяshared_ptr, который разделяет право собственности с r. Никогда не бросай.

  6. шаблон<имяY>эксплицитноshared_ptrweak_ptr<Y,VoidAllocator,Deleter>const&r;

    Конструируетshared_ptr, который разделяет право собственности с r и хранит копию указателя, хранящегося в r.

  7. явныйshared_ptrshared_ptr&&другой;

    Move-Constructs ashared_ptr, который принимает на себя право собственности на другой ресурс и другой по умолчанию построен состояние. Броски: ничего.

  8. шаблон<имя типа>shared_ptr&оператор=shared_ptr<YVoidAllocator,Deleter>const&r;

    Эквивалентно shared_ptr(r).swap(*this). Никогда не бросайте

  9. shared_ptr&оператор=BOOST_COPY_ASSIGN_REFshared_ptr];

    Эквивалент Shared_ptr(r.swap(*this). Никогда не бросайте

  10. shared_ptr&оператор=shared_ptr&&other;

    Перемещение. эквивалентно shared_ptr(other).swap(*this). Никогда не бросай

shared_ptr public member functions

  1. voidreset;

    Это эквивалентно: this_type(.swap(*this);

  2. шаблон<имя типаPointer>voidreset&p,const&

    [ Это эквивалентно: this_type(p, a, d.swap(*this);

  3. шаблон<имя типаY>voidresetshared_ptr<Y,VoidAllocator,Deleter>const&constconst&p;
  4. ссылкаоператор*конст;

    Возвращает ссылку на заостренный тип

  5. указательоператор->const;

    Возвращает указатель, указывающий на принадлежащий объект

  6. указательполучитьконст;

    Возвращает указатель, указывающий на принадлежащий объект

  7. boolоператор!const;

    Не оператор. Возвращается верно, если это->get()! 0, ложно иначе

  8. booluniqueconst;

    Возврат использования_count() == 1. unique() может быть быстрее, чем use_count()

  9. длинныйuse_countконст;

    Возвращает количествоShared_ptrобъектов, *это включено, что владение акциями с *это, или неопределенное неотрицательное значение, когда *это пуст. use_count() не обязательно эффективен. Используйте только для отладки и тестирования, а не для производственного кода.

  10. voidswapshared_ptr<T,VoidAllocator,Deleter>&other;

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


PrevUpHomeNext

Статья Class template shared_ptr раздела The Boost C++ Libraries BoostBook Documentation Subset Indexes and Reference может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Indexes and Reference ::


реклама


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

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