std::optional<T>::reset
Материал из cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev ">
</tbody><tbody>
</tbody>
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 функция-элемент) |