std::shared_ptr<T>:: use_count
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Modifiers | ||||
| Observers | ||||
|
(C++17)
|
||||
|
shared_ptr::use_count
|
||||
|
(
until C++20*
)
|
||||
|
(C++26)
|
||||
|
(C++26)
|
||||
| Non-member functions | ||||
|
(until C++20)
(until C++20)
(until C++20)
(until C++20)
(until C++20)
(C++20)
|
||||
|
functions
(
until C++26*
)
|
||||
| Helper classes | ||||
|
(C++20)
|
||||
| Deduction guides (C++17) |
|
long
use_count
(
)
const
noexcept
;
|
||
Devuelve el número de diferentes
shared_ptr
instancias (
*
this
incluido) gestionando el objeto actual. Si no hay objeto gestionado,
0
es devuelto.
En un entorno multihilo, use_count recupera atómicamente el número de instancias (las implementaciones típicas utilizan una memory_order_relaxed load).
Contenidos |
Parámetros
(ninguno)
Valor de retorno
El número de std::shared_ptr instancias que gestionan el objeto actual o 0 si no hay un objeto gestionado.
Notas
Casos de uso comunes incluyen
-
comparación con
0
. Si
use_countretorna cero, el shared pointer está vacío y no gestiona ningún objeto (independientemente de si su puntero almacenado es nullptr ). -
comparación con
1
. Si
use_countretorna 1, no hay otros propietarios. La obsoleta (desde C++17) función miembro unique() se proporciona para este caso de uso. (hasta C++20)
En entorno multihilo
El valor devuelto por
use_count
debe considerarse aproximado, ya que el número de propietarios compartidos podría cambiar en otros hilos entre la recuperación atómica y el uso significativo del valor. Cuando
use_count
devuelve 1, no implica que el objeto sea seguro de modificar porque los accesos al objeto gestionado por antiguos propietarios compartidos podrían no haber finalizado, y porque nuevos propietarios compartidos pueden introducirse concurrentemente, como mediante
std::weak_ptr::lock
. Solo cuando
use_count
devuelve 0 el conteo es preciso.
Ejemplo
#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); }
Salida posible:
in main(): sp1.use_count() == 1 (object @ 0x20eec30) in fun(): sp.use_count() == 2 (object @ 0x20eec30)
Véase también
|
(until C++20)
|
verifica si el objeto administrado está gestionado únicamente por el objeto
shared_ptr
actual
(función miembro pública) |