Espacios de nombres
Variantes

std::weak_ptr::weak_ptr

De cppreference.com
 
 
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)
 
 
<tbody> </tbody>
constexpr weak_ptr() noexcept;
(1) (desde C++11)
weak_ptr( const weak_ptr& r ) noexcept;
(2) (desde C++11)
template< class Y > weak_ptr( const weak_ptr<Y>& r ) noexcept;
(2) (desde C++11)
template< class Y > weak_ptr( const std::shared_ptr<Y>& r ) noexcept;
(2) (desde C++11)
weak_ptr( weak_ptr&& r ) noexcept;
(3) (desde C++11)
template< class Y > weak_ptr( weak_ptr<Y>&& r ) noexcept;
(3) (desde C++11)

Construye un nuevo weak_ptr que potencialmente comparte un objeto con r.

1) Constructor por defecto. Construye un weak_ptr vacío.
2) Construye un nuevo weak_ptr que comparte un objeto gestionado por r. Si r no gestiona ningún objeto, *this tampoco gestiona ningún objeto. Las sobrecargas de plantilla no participan en la resolución de sobrecarga a menos que Y* sea convertible implícitamente a T*, o Y sea de tipo "array de N U" para algún tipo U y algún número N, y T sea de tipo "array de límite desconocido de U (posiblemente calificado-cv)" (desde C++17).
3) Constructores de movimiento. Mueve una instancia de weak_ptr de r a *this. Después de esto, r está vacío y r.use_count()==0. La sobrecarga de plantilla no participa en la resolución de sobrecarga a menos que Y* sea convertible implícitamente a T*.

Parámetros

r - Un std::shared_ptr o std::weak_ptr que se observará por este std::weak_ptr.

Notas

Dado que el constructor predeterminado es constexpr, los std::weak_ptr estáticos se inicializan como parte de la inicialización estática no local, antes de que comience cualquier inicialización dinámica no local. Esto hace que sea seguro usar std::weak_ptr en un constructor de cualquier objeto estático.

Ejemplo

#include <memory>
#include <iostream>

struct Foo {};

int main()
{
   std::weak_ptr<Foo> w_ptr;

   {
      auto ptr = std::make_shared<Foo>();
      w_ptr = ptr;
      std::cout << "w_ptr.use_count() dentro del ámbito: " << w_ptr.use_count() << '\n';
   }

   std::cout << "w_ptr.use_count() fuera del ámbito: " << w_ptr.use_count() << '\n';
   std::cout << "w_ptr.expired() fuera del ámbito: " << std::boolalpha << w_ptr.expired() << '\n';
}

Salida:

w_ptr.use_count() dentro del ámbito: 1
w_ptr.use_count() fuera del ámbito: 0
w_ptr.expired() fuera del ámbito: true

Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 2315 C++11 La semántica de movimiento no estaba habilitada para weak_ptr. Se habilitó.

Véase también

Asigna el weak_ptr.
(función miembro pública) [editar]