std::weak_ptr::use_count
De cppreference.com
long use_count()constnoexcept; | (desde C++11) | |
Devuelve el número de instancias de shared_ptr
que comparten la posesión del objeto gestionado, o 0 si el objeto gestionado ya se eliminó, es decir, *this está vacío.
Contenido |
[editar]Parámetros
(Ninguno)
[editar]Valor de retorno
El número de instancias de shared_ptr
que comparten la posesión del objeto gestionado en el instante de la llamada.
[editar]Notas
expired() puede ser más rápido que use_count()
. Esta función es intrínsecamente susceptible a carreras de datos si el objeto gestionado se comparte entre hilos que podrían estar creando y destruyendo copias de shared_ptr
: entonces, el resultado es confiable solo si coincide con la cantidad de copias de posesión exclusiva de la persona que llama hilo, o cero; cualquier otro valor puede volverse obsoleto antes de que pueda usarse.
[editar]Ejemplo
Ejecuta este código
#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';elsestd::cout<<"??\n";} void share_recursively(std::shared_ptr<int> sp, int depth){ observe_gwp();// : 2 3 4if(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}
Salida:
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: ??
[editar]Véase también
Comprueba si el objeto referenciado ya ha sido eliminado. (función miembro pública) |