Пространства имён
Варианты
Действия

std::bad_weak_ptr

Материал из cppreference.com
< cpp‎ | memory
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Динамическое управление памятью
no section name
Ограниченные алгоритмы неинициализированной памяти
no section name
Поддержка сбора мусора
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)



no section name
 
Определено в заголовочном файле <memory>
class bad_weak_ptr;
(начиная с C++11)

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

cpp/error/exceptionstd-bad weak ptr-inheritance.svg

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

Содержание

[править] Функции-элементы

(конструктор)
создаёт новый объект bad_weak_ptr
(public функция-элемент)
operator=
заменяет объект bad_weak_ptr
(public функция-элемент)
what
возвращает пояснительную строку
(public функция-элемент)

std::bad_weak_ptr::bad_weak_ptr

bad_weak_ptr() noexcept;
(1) (начиная с C++11)
bad_weak_ptr( const bad_weak_ptr& other ) noexcept;
(2) (начиная с 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;
(начиная с 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

Функции-элементы

уничтожает объект исключения
(virtual public of std::exception функция-элемент) [править]
[virtual]
возвращает поясняющую строку
(virtual public of 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++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 2376 C++11 вызов what для созданного по умолчанию bad_weak_ptr
был необходим для возврата "bad_weak_ptr"
возвращаемое значение определяется реализацией

[править] Смотрите также

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