Espacios de nombres
Variantes
Acciones

std::shared_ptr<T>::use_count

De cppreference.com
< cpp‎ | memory‎ | shared ptr
 
 
Biblioteca de servicios
 
Gestión de memoria dinámica
Punteros inteligentes
(C++11)
(C++11)
(C++11)
(hasta C++17)
(C++11)
(C++23)
Asignadores de memoria
Recursos de memoria
Almacenamiento no inicializado
Algoritmos de memoria no inicializada
Algoritmos restringidos de memoria no inicializada
Apoyo para recolección de basura
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
Misceláneos
(C++20)
(C++11)
(C++11)
 
 
long use_count()constnoexcept;

Devuelve el número de instancias de shared_ptr distintas (incluido this) que gestionan el objeto actual. Si no hay un objeto gestionado, se devuelve, 0.

En un entorno multihilos, el valor devuelto por use_count es aproximado (las implementaciones típicas usan una carga memory_order_relaxed).

Contenido

[editar]Parámetros

(Ninguno)

[editar]Valor de retorno

El número de instancias de shared_ptr distintas (incluido this) que gestionan el objeto actual o 0 si no hay un objeto gestionado.

[editar]Notas

Los casos de uso comunes incluyen:

  • Comparación con 0. Si use_count devuelve cero, el puntero compartido está "vacío" y no gestiona ningún objeto (ya sea que su puntero almacenado sea o no nullptr). En un entorno multihilos, esto no implica que el destructor del objeto gestionado se haya completado.
  • Comparación con 1. Si use_count devuelve 1, no hay otros propietarios. La función miembro unique()en desuso(desde C++17) se proporciona para este caso de uso.(hasta C++20) En un entorno multihilos, esto no implica que sea seguro modificar el objeto porque es posible que los accesos al objeto gestionado por parte de los propietarios compartidos anteriores no se hayan completado, y porque se pueden introducir nuevos propietarios compartidos de manera concurrente, como std::weak_ptr::lock.

[editar]Ejemplo

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

Posible salida:

en main(): sp1.use_count() == 1 (objeto @ 0x20eec30) en fun(): sp.use_count() == 2 (objeto @ 0x20eec30)

[editar]Véase también

(hasta C++20)
Comprueba si el objeto gestionado se gestiona solo por la instancia de shared_ptr actual.
(función miembro pública)[editar]
close