std::optional<T>::reset
Материал из cppreference.com
void reset() noexcept; |
(начиная с C++17) (до C++20) |
|
constexpr void reset() noexcept; |
(начиная с C++20) | |
Если *this содержит значение, уничтожает это значение, как будто с помощью value().T::~T(). Иначе не имеет эффектов.
*this не содержит значения после этого вызова.
[править] Пример
Запустить этот код
#include <optional> #include <iostream> struct A { std::string s; A(std::string str) : s(std::move(str)) { std::cout << " создан\n"; } ~A() { std::cout << " разрушен\n"; } A(const A& o) : s(o.s) { std::cout << " создан копированием\n"; } A(A&& o) : s(std::move(o.s)) { std::cout << " создан перемещением\n"; } A& operator=(const A& other) { s = other.s; std::cout << " присваивание копированием\n"; return *this; } A& operator=(A&& other) { s = std::move(other.s); std::cout << " присваивание перемещением\n"; return *this; } }; int main() { std::cout << "Создание пустого optional:\n"; std::optional<A> opt; std::cout << "Создание и присваивание значения:\n"; opt = A("Lorem ipsum dolor sit amet, consectetur adipiscing elit nec."); std::cout << "Сброс optional:\n"; opt.reset(); std::cout << "Конец примера\n"; }
Вывод:
Создание пустого optional: Создание и присваивание значения: создан создан перемещением разрушен Сброс optional: разрушен Конец примера
[править] Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
WG не указан | C++20 | reset не была constexpr, в то время как нетривиальное уничтожениеразрешено в constexpr в C++20 |
сделана constexpr |
[править] Смотрите также
присваивает содержимое (public функция-элемент) |