23 General utilities library [utilities]

23.11 Smart pointers [smartptr]

23.11.2 Shared-ownership pointers [util.smartptr]

23.11.2.2 Class template shared_­ptr [util.smartptr.shared]

23.11.2.2.5 shared_­ptr observers [util.smartptr.shared.obs]

element_type* get() const noexcept;

Returns: Сохраненный указатель.

T& operator*() const noexcept;

Requires: get() != 0.

Returns: *get().

Remarks: Когда T является типом массива или cv void, не указано, объявлена ​​ли эта функция-член. Если он объявлен, то не указывается, каков его возвращаемый тип, за исключением того, что объявление (хотя и не обязательно определение) функции должно быть правильно сформировано.

T* operator->() const noexcept;

Requires: get() != 0.

Returns: get().

Remarks: Когда T это тип массива, не указывается, объявлена ​​ли эта функция-член. Если он объявлен, то не указывается, каков его возвращаемый тип, за исключением того, что объявление (хотя и не обязательно определение) функции должно быть правильно сформировано.

element_type& operator[](ptrdiff_t i) const;

Requires: get() != 0 && i >= 0. Если T есть U[N], то i < N.

Returns: get()[i].

Remarks: Когда T не является типом массива, не указывается, объявлена ​​ли эта функция-член. Если он объявлен, то не указывается, каков его возвращаемый тип, за исключением того, что объявление (хотя и не обязательно определение) функции должно быть правильно сформировано.

Throws: Ничего такого.

long use_count() const noexcept;

Returns: Количество включенных shared_­ptr объектов, *this которым принадлежит общая собственность *this, или 0 когда *this оно пусто.

Synchronization: Никто.

[ Note: get() == nullptr не подразумевает конкретного возвращаемого значения use_­count(). ] end note

[ Note: weak_­ptr<T>​::​lock() может повлиять на возвращаемое значение use_­count(). ] end note

[ Note: Если несколько потоков могут повлиять на возвращаемое значение use_­count(), результат следует рассматривать как приблизительный. В частности, use_­count() == 1 это не означает, что доступ через ранее уничтоженный объект shared_­ptr в каком-либо смысле завершен. ] end note

explicit operator bool() const noexcept;

Returns: get() != 0.

template<class U> bool owner_before(const shared_ptr<U>& b) const noexcept; template<class U> bool owner_before(const weak_ptr<U>& b) const noexcept;

Returns: Неуказанное значение такое, что

  • x.owner_­before(y) определяет строгий слабый порядок, как определено в [alg.sorting];

  • по отношению эквивалентности , определенное owner_­before, !a.owner_­before(b) && !b.owner_­before(a)два shared_­ptr или weak_­ptr экземпляры эквивалентны тогда и только тогда , когда они имеют право собственности или являются пустыми.