std::out_ptr_t<Smart,Pointer,Args...>::out_ptr_t
explicit out_ptr_t( Smart& sp, Args... args ); | (1) |
(начиная с C++23) (constexpr начиная с C++26) |
out_ptr_t( const out_ptr_t& ) = delete; | (2) | (начиная с C++23) |
out_ptr_t. - Адаптирует
spтак, как если бы он был привязан к члену Smart&, захватывает каждый аргументtвargsтак, как если бы инициализировал соответствующий член типаTвArgsс помощьюstd::forward<T>(t), а затем выполняет инициализацию по значению сохранённогоPointer. - Затем вычисляет
sp.reset(), если выражение корректно; в противном случае вычисляетsp = Smart(), еслиstd::is_default_constructible_v<Smart>— этоtrue. Если обе операции сброса некорректны, программа некорректна.
2) Конструктор копирования явно удалён.
out_ptr_t нельзя ни копировать, ни перемещать.Параметры
| sp | - | объект (обычно интеллектуальный указатель), который необходимо адаптировать |
| args | - | аргументы для сброса, которые нужно захватить |
Исключения
Может выбрасывать исключения, определяемые реализацией.
Примечания
После создания объект Pointer или void*, на который указывает возвращаемое значение любой из функций преобразования, равен nullptr.
Каждый аргумент в args перемещается в созданный out_ptr_t, если он имеет объектный тип, или передаётся в созданный out_ptr_t без изменений, если он имеет ссылочный тип.
Конструктору out_ptr_t разрешено выбрасывать исключения. Например, если sp является std::shared_ptr, выделение памяти для нового управляющего блока может выполняться в конструкторе, а не в деструкторе.
Пример
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/out_ptr_t/out_ptr_t