Scroll to navigation

std::bad_weak_ptr(3) C++ Standard Libary std::bad_weak_ptr(3)

NAME

std::bad_weak_ptr - std::bad_weak_ptr

Synopsis


Defined in header <memory>
class bad_weak_ptr; (since C++11)


std::bad_weak_ptr is the type of the object thrown as exceptions by the constructors
of std::shared_ptr that take std::weak_ptr as the argument, when the std::weak_ptr
refers to an already deleted object.


std-bad weak ptr-inheritance.svg


Inheritance diagram

Member functions


constructor constructs a new bad_weak_ptr object
(public member function)
operator= replaces the bad_weak_ptr object
(public member function)
what returns the explanatory string
(public member function)

std::bad_weak_ptr::bad_weak_ptr


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


Constructs a new bad_weak_ptr object with an implementation-defined null-terminated
byte string which is accessible through what().


1) Default constructor.
2) Copy constructor. If *this and other both have dynamic type std::bad_weak_ptr
then std::strcmp(what(), other.what()) == 0.

Parameters


other - another exception object to copy

std::bad_weak_ptr::operator=


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


Assigns the contents with those of other. If *this and other both have dynamic type
std::bad_weak_ptr then std::strcmp(what(), other.what()) == 0 after assignment.

Parameters


other - another exception object to assign with

Return value


*this

std::bad_weak_ptr::what


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


Returns the explanatory string.

Parameters


(none)

Return value


Pointer to a null-terminated string with explanatory information. The string is
suitable for conversion and display as a std::wstring. The pointer is guaranteed to
be valid at least until the exception object from which it is obtained is destroyed,
or until a non-const member function (e.g. copy assignment operator) on the
exception object is called.

Notes


Implementations are allowed but not required to override what().

Inherited from std::exception

Member functions


destructor destroys the exception object
[virtual] (virtual public member function of std::exception)
what returns an explanatory string
[virtual] (virtual public member function of std::exception)

Example

// Run this code


#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';
}
}

Possible output:


std::bad_weak_ptr


Defect reports


The following behavior-changing defect reports were applied retroactively to
previously published C++ standards.


DR Applied to Behavior as published Correct behavior
calling what on a default-constructed the return value is
LWG 2376 C++11 bad_weak_ptr was required to return implementation-defined
"bad_weak_ptr"

See also


shared_ptr smart pointer with shared object ownership semantics
(C++11) (class template)
weak_ptr weak reference to an object managed by std::shared_ptr
(C++11) (class template)

2022.07.31 http://cppreference.com