Espacios de nombres
Variantes
Acciones

std::bad_weak_ptr

De cppreference.com
< cpp‎ | memory
 
 
Biblioteca de servicios
 
Gestión de memoria dinámica
Punteros inteligentes
(C++11)
(C++11)
(C++11)
(hasta C++17)
(C++11)
bad_weak_ptr
(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)
 
Definido en el archivo de encabezado <memory>
class bad_weak_ptr;
(desde C++11)

std::bad_weak_ptr es el tipo de objeto lanzado como excepción por los constructores de std::shared_ptr que toman std::weak_ptr como argumento, cuando el std::weak_ptr se refiere a un objeto ya eliminado.

cpp/error/exceptionstd-bad weak ptr-inheritance.svg
Acerca de esta imagen

Inheritance diagram

Contenido

[editar] Funciones miembro

(constructor)
Construye un nuevo objeto bad_weak_ptr.
(función miembro pública)
operator=
Reemplaza el objeto bad_weak_ptr.
(función miembro pública)
what
Devuelve la cadena aclaratoria.
(función miembro pública)

std::bad_weak_ptr::bad_weak_ptr

bad_weak_ptr() noexcept;
(1) (desde C++11)
bad_weak_ptr( const bad_weak_ptr& other ) noexcept;
(2) (desde C++11)

Construye un nuevo objeto bad_weak_ptr con una cadena de bytes terminada en nulo definida por la implementación, que es accesible a través de what().

1) Constructor por defecto.
2) Constructor de copia. Si tanto *this como other tienen un tipo dinámico std::bad_weak_ptr, entonces std::strcmp(what(), other.what()) == 0.

Parámetros

other - El otro objeto de excepción del que copiar.

std::bad_weak_ptr::operator=

bad_weak_ptr& operator=( const bad_weak_ptr& other ) noexcept;
(desde C++11)

Asigna el contenido con el de other. Si tanto *this como other tienen el tipo dinámico std::bad_weak_ptr, entonces std::strcmp(what(), other.what()) == 0 después de la asignación.

Parámetros

other - Otro objeto excepción con el cual asignar.

Valor de retorno

*this

std::bad_weak_ptr::what

virtual const char* what() const noexcept;
(desde C++11)

Devuelve la cadena aclaratoria.

Parámetros

(Ninguno)

Valor de retorno

Un puntero a una cadena terminada en nulo con información aclaratoria. La cadena es adecuada para convertirse y mostrarse como un std::wstring. Se garantiza que el puntero sea válido al menos hasta que el objeto excepción del cual se obtuvo se destruya, o hasta que una función miembro no const (p. ej., el operador de asignación de copia) se llame en el objeto excepción.

Notas

Se permite, pero no se requiere, que las implementaciones redefinan a what().

Heredado de std::exception

Funciones miembro

[virtual]
Destruye el objeto excepción.
(función miembro virtual pública de std::exception) [editar]
[virtual]
Devuelve una cadena aclaratoria.
(función miembro virtual pública de std::exception) [editar]

[editar] Ejemplo

#include <memory>
#include <iostream>
int main()
{
    std::shared_ptr<int> p1(new int(42));
    std::weak_ptr<int> wp(p1);
    p1.reset();
    try {
        std::shared_ptr<int> p2(wp);
    } catch(const std::bad_weak_ptr& e) {
        std::cout << e.what() << '\n';
    }
}

Posible salida:

std::bad_weak_ptr

[editar] 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 2376 C++11 Se requería que llamar a what en un bad_weak_ptr construido por defecto devolviera "bad_weak_ptr". El valor de retorno está definido por la implementación.

[editar] Véase también

Puntero inteligente con semántica de posesión de objeto compartida.
(plantilla de clase) [editar]
(C++11)
Referencia débil a un objeto gestionado por std::shared_ptr.
(plantilla de clase) [editar]