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/exception

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

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

(constructor)
создаёт новый объект 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 с завершающей нулём строкой байтов, определяемой реализацией и доступной через 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)
(constexpr начиная с C++26)

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

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

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

При вычислении константного выражения возвращаемая строка кодируется с использованием обычной кодировки литералов.

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

Примечания

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

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

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

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

Примечания

Макрос проверки поддержки возможности Значение Стандарт Возможность
__cpp_lib_constexpr_memory 202506L (C++26) constexpr std::bad_weak_ptr

Пример

#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"
возвращаемое значение определяется реализацией

См. также

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/cpp/memory/bad_weak_ptr

Spec-Zone.ru

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