std::bad_weak_ptr
Определено в заголовочном файле <memory> | ||
|---|---|---|
class bad_weak_ptr; | (начиная с C++11) |
std::bad_weak_ptr — это тип объекта, выбрасываемого в качестве исключения конструкторами std::shared_ptr, принимающими std::weak_ptr в качестве аргумента, если std::weak_ptr ссылается на уже удалённый объект.
Диаграмма наследования
Функции-члены
|
(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().
*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
Функции-члены
|
[virtual] | уничтожает объект исключения (виртуальная открытая функция-член std::exception) |
|
[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" | возвращаемое значение определяется реализацией |
См. также
|
(C++11) | умный указатель с семантикой совместного владения объектом (шаблон класса) |
|
(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