Namespaces
Variants

std:: bad_weak_ptr

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
Определено в заголовке <memory>
class bad_weak_ptr ;
(начиная с C++11)

std::bad_weak_ptr — это тип объекта, выбрасываемого в качестве исключения конструкторами std::shared_ptr , которые принимают std::weak_ptr в качестве аргумента, когда std::weak_ptr ссылается на уже удалённый объект.

cpp/error/exception std-bad weak ptr-inheritance.svg

Диаграмма наследования

Содержание

Функции-члены

(constructor)
создает новый объект bad_weak_ptr
(public member function)
operator=
заменяет объект bad_weak_ptr
(public member function)
what
возвращает поясняющую строку
(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)

Создает новый объект bad_weak_ptr с определенной реализацией нуль-терминированной байтовой строкой, доступной через what() .

1) Конструктор по умолчанию.
2) Конструктор копирования. Если * this и other оба имеют динамический тип std::bad_weak_ptr , то std:: strcmp ( what ( ) , other. what ( ) ) == 0 .

Параметры

other - другой объект исключения для копирования

std::bad_weak_ptr:: operator=

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

Присваивает содержимое из other . Если * this и other оба имеют динамический тип std::bad_weak_ptr , то std:: strcmp ( what ( ) , other. what ( ) ) == 0 после присваивания.

Параметры

other - другой объект исключения для присваивания

Возвращаемое значение

* this

std::bad_weak_ptr:: what

virtual const char * what ( ) const noexcept ;
(начиная с C++11)

Возвращает пояснительную строку.

Возвращаемое значение

Указатель на определённую реализацией нуль-терминированную строку с пояснительной информацией. Строка пригодна для преобразования и отображения как std::wstring . Гарантируется, что указатель остаётся действительным по крайней мере до тех пор, пока не будет уничтожен объект исключения, из которого он получен, или пока не будет вызвана неконстантная функция-член (например, оператор копирующего присваивания) для объекта исключения.

Примечания

Реализациям разрешено, но не требуется, переопределять what() .

Унаследовано от std:: exception

Функции-члены

уничтожает объект исключения
(виртуальная публичная функция-член std::exception )
[virtual]
возвращает поясняющую строку
(виртуальная публичная функция-член std::exception )

Пример

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

Возможный вывод:

std::bad_weak_ptr

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

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

Смотрите также

(C++11)
умный указатель с семантикой совместного владения объектом
(шаблон класса)
(C++11)
слабая ссылка на объект, управляемый std::shared_ptr
(шаблон класса)