std::out_ptr_t<Smart,Pointer,Args...>:: operator Pointer*, std::out_ptr_t<Smart,Pointer,Args...>:: operator void**
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
out_ptr_t::operator Pointer*
out_ptr_t::operator void**
|
||||
| Non-member functions | ||||
|
operator Pointer
*
(
)
const
noexcept
;
|
(1) | (начиная с C++23) |
|
operator
void
**
(
)
const
noexcept
;
|
(2) | (начиная с C++23) |
Предоставляет адрес объекта
Pointer
или
void
*
внешней функции, которая обычно выполняет его повторную инициализацию.
Pointer
.
Pointer
не совпадает с
void
*
, и программа является некорректной, если
Pointer
не является типом указателя.
Начальное значение объекта void * равно значению сохраненного объекта
Pointer
, преобразованного в
void
*
, и любая его модификация влияет на значение
Pointer
, используемое в
деструкторе
. Доступ к объекту
void
*
за пределами времени жизни
*
this
приводит к неопределенному поведению.
После того как одна из этих двух функций преобразования была вызвана для объекта
out_ptr_t
, другая не должна вызываться для него, в противном случае поведение не определено.
Содержание |
Параметры
(нет)
Возвращаемое значение
Pointer
объекта.
Примечания
Если объект, на который указывает возвращаемое значение, не был перезаписан, он равен nullptr .
В распространённых реализациях объектное представление каждого
Pointer
, являющегося типом указателя, совместимо с представлением
void
*
, и поэтому такие реализации обычно хранят объект
void
*
в памяти, отведённой для объекта
Pointer
, без необходимости в дополнительной памяти:
- Если реализация включает анализ псевдонимов на основе типов (который опирается на правило строгого псевдонимирования ), может использоваться правильно выровненный std:: byte [ sizeof ( void * ) ] подобъект-член, и обе функции преобразования возвращают адрес объектов, неявно созданных внутри массива.
-
В противном случае, подобъект-член
Pointerможет использоваться для обеих функций преобразования, и (2) может напрямую возвращать его адрес reinterpret_cast в void ** .
Если
Pointer
является типом указателя, чьё представление объекта несовместимо с представлением
void
*
, может потребоваться дополнительный
bool
флаг для записи того, была ли вызвана
(1)
(или
(2)
).
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |