std::out_ptr_t<Smart,Pointer,Args...>::out_ptr_t
explicit out_ptr_t( Smart &sp, Args... args ); | (1) | (с C++23) |
out_ptr_t( const out_ptr_t& ) = delete; | (2) | (с C++23) |
1) Создаёт
Затем вызывает
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/w/cpp/memory/out_ptr_t/out_ptr_t