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