std::shared_ptr<T>::use_count
De cppreference.com
< cpp | memory | shared ptr
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
Ejecuta este código
#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) |