◐ Shell
clean mode source ↗

std::bad_weak_ptr — cppreference.com

Материал из cppreference.com

<tbody> </tbody>

Определено в заголовочном файле <memory>

class bad_weak_ptr;

(начиная с C++11)

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

cpp/error/exception

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

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

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

std::bad_weak_ptr::bad_weak_ptr

<tbody> </tbody>

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=

<tbody> </tbody>

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

<tbody> </tbody>

virtual const char* what() const noexcept;

(начиная с C++11)

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

Параметры

(нет)

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

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

Примечание

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

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

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

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

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

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

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

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

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

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