std::inout_ptr_t<Smart,Pointer,Args...>::operator Pointer*, std::inout_ptr_t<Smart,Pointer,Args...>::operator void**
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 имеет неопределённое поведение.Как только одна из этих двух функций преобразования была вызвана для объекта inout_ptr_t
, другая не должна вызываться для него, иначе поведение не определено.
Содержание |
[править] Параметры
(нет)
[править] Возвращаемое значение
Pointer
.[править] Примечание
Если объект, на который указывает возвращаемое значение, не был перезаписан, он равен значению, хранящемуся в адаптированном Smart
объекте до построения.
В обычных реализациях объектное представление каждого Pointer
, который является типом указателя, совместимо с представлением void*, и поэтому эти реализации обычно хранят void* объект в хранилище для объекта Pointer
, дополнительное хранилище не требуется:
- Если реализация включает анализ псевдонимов на основе типов (который опирается на строгое правило псевдонимов), можно использовать правильно выровненный подобъект-элемент std::byte[sizeof(void*)], и обе функции преобразования возвращают адрес объектов, неявно созданных в массиве.
- Иначе подобъект-элемент
Pointer
может использоваться для обеих функций преобразования, а (2) может напрямую возвращать свой адрес reinterpret_cast в void**.
Если Pointer
является типом указателя, объектное представление которого несовместимо с объектным представлением void*, может потребоваться дополнительный флаг bool для записи того, выполнилась ли (1) (или (2)).
[править] Пример
Этот раздел не завершён Причина: нет примера |