Пространства имён
Варианты
Действия

std::weak_ptr<T>::use_count

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Динамическое управление памятью
no section name
Ограниченные алгоритмы неинициализированной памяти
no section name
Поддержка сбора мусора
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)



no section name
 
std::weak_ptr
Функции-элементы
Модификаторы
Наблюдатели
Функции, не являющиеся элементами
Вспомогательные классы
Правила вывода(C++17)
 
<tbody> </tbody>
long use_count() const noexcept;
(начиная с C++11)

Возвращает количество экземпляров shared_ptr, которые совместно владеют управляемым объектом, или 0, если управляемый объект уже удалён, то есть *this пуст.

Параметры

(Нет)

Возвращаемое значение

Количество экземпляров shared_ptr, совместно владеющих управляемым объектом в момент вызова.

Примечание

expired() может быть быстрее, чем use_count(). Эта функция приводит к гонкам, если управляемый объект совместно используется потоками, которые могут создавать и уничтожать копии shared_ptr: тогда результат надёжен только в том случае, если он совпадает с количеством копий, которыми однозначно владеет вызывающий объект, или ноль; любое другое значение может устареть до того, как его можно будет использовать.

Пример

#include <iostream>
#include <memory>

std::weak_ptr<int> gwp;

void observe_gwp() {
    std::cout << "use_count(): " << gwp.use_count() << "\t id: ";
    if (auto sp = gwp.lock())
        std::cout << *sp << '\n';
    else
        std::cout << "??\n";
}

void share_recursively(std::shared_ptr<int> sp, int depth) {
    observe_gwp(); // : 2 3 4
    if (1 < depth)
        share_recursively(sp, depth - 1);
    observe_gwp(); // : 4 3 2
}

int main() {
    observe_gwp();
    {
        auto sp = std::make_shared<int>(42);
        gwp = sp;
        observe_gwp(); // : 1
        share_recursively(sp, 3); // : 2 3 4 4 3 2
        observe_gwp(); // : 1
    }
    observe_gwp(); // : 0
}

Вывод:

use_count(): 0   id: ??
use_count(): 1   id: 42
use_count(): 2   id: 42
use_count(): 3   id: 42
use_count(): 4   id: 42
use_count(): 4   id: 42
use_count(): 3   id: 42
use_count(): 2   id: 42
use_count(): 1   id: 42
use_count(): 0   id: ??

Смотрите также

проверяет, был ли удалён объект, на который ссылается weak_ptr
(public функция-элемент) [править]