Spec-Zone.ru › C++

std::bad_weak_ptr

Определено в заголовке <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
(публичная функция-член)
operator=
заменяет объект bad_weak_ptr
(публичная функция-член)
what
возвращает строку с пояснением
(публичная функция-член)

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 с определённой реализацией null-терминированной строки байтов, доступной через 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)

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

Параметры

(нет)

Значение возврата

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

Примечания

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

Наследуется от std::exception

Члены-функции

(деструктор)
[виртуальный]
уничтожает объект исключения
(виртуальная публичная функция-член std::exception)
what
[виртуальный]
возвращает строку с пояснением
(виртуальная публичная функция-член 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 Применён к Поведение, как опубликовано Правильное поведение
LWG 2376 C++11 вызов what для bad_weak_ptr, созданного по умолчанию, был обязателен для возврата "bad_weak_ptr" значение возврата определено реализацией

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/memory/bad_weak_ptr

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API