Spec-Zone.ru › C++

std::shared_ptr<T>::use_count

long use_count() const noexcept;

Возвращает количество различных shared_ptr экземпляров (включая this), управляющих текущим объектом. Если управляемого объекта нет, возвращается ​0​.

В многопоточной среде значение, возвращаемое use_count, является приблизительным (типичные реализации используют загрузку с memory_order_relaxed).

Параметры

(нет)

Значение возврата

Количество std::shared_ptr экземпляров, управляющих текущим объектом, или ​0​, если управляемого объекта нет.

Примечания

Распространенные случаи использования:

  • сравнение с ​0​. Если use_count возвращает ноль, ссылка на общий объект пуста и не управляет никакими объектами (неважно, является ли хранимый указатель nullptr или нет).
  • сравнение с 1. Если use_count возвращает 1, других владельцев нет. Функция устаревшего(с C++17) члена unique() предоставляется для этого случая.(до C++20) В многопоточной среде это не означает, что объект безопасно модифицировать, так как доступ к управляемому объекту предыдущими общими владельцами может еще не завершиться, а также потому, что новые общие владельцы могут быть созданы одновременно, например, при помощи std::weak_ptr::lock.

Пример

#include <iostream>
#include <memory>
 
void fun(std::shared_ptr<int> sp)
{
    std::cout << "in fun(): sp.use_count() == " << sp.use_count()
              << " (object @ " << sp << ")\n";
}
 
int main()
{
    auto sp1 = std::make_shared<int>(5);
    std::cout << "in main(): sp1.use_count() == " << sp1.use_count()
              << " (object @ " << sp1 << ")\n";
 
    fun(sp1);
}

Возможный вывод:

in main(): sp1.use_count() == 1 (object @ 0x20eec30)
in fun(): sp.use_count() == 2 (object @ 0x20eec30)

См. также

unique
(до C++20)
проверяет, управляется ли управляемый объект только текущим shared_ptr экземпляром
(публичный член-функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/memory/shared_ptr/use_count

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API