Пространства имён
Варианты
Действия

std::inout_ptr_t<Smart,Pointer,Args...>::operator Pointer*, std::inout_ptr_t<Smart,Pointer,Args...>::operator void**

Материал из cppreference.com
< cpp‎ | memory‎ | inout ptr t
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Динамическое управление памятью
no section name
Ограниченные алгоритмы неинициализированной памяти
no section name
Поддержка сбора мусора
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)



no section name
 
std::inout_ptr_t
Функции-элементы
inout_ptr_t::operator Pointer*inout_ptr_t::operator void**
Функции, не являющиеся элементами
 
operator Pointer*() const noexcept;
(1) (начиная с C++23)
operator void**() const noexcept;
(2) (начиная с C++23)

Предоставляет адрес объекта Pointer или void* сторонней функции, которая обычно освобождает право владения, представленное его значением, а затем повторно инициализирует его.

1) Преобразует *this в адрес сохранённого объекта Pointer.
2) Преобразует *this в адрес объекта void*. Эта функция преобразования участвует в разрешении перегрузки только в том случае, если Pointer не совпадает с void*, и программа некорректна, если Pointer не является типом указателя.
Начальное значение объекта void* равно значению сохранённого объекта Pointer, преобразованному в void*, и любое его изменение влияет на значение Pointer, используемое в деструкторе. Доступ к объекту void* вне времени существования *this имеет неопределённое поведение.

Как только одна из этих двух функций преобразования была вызвана для объекта inout_ptr_t, другая не должна вызываться для него, иначе поведение не определено.

Содержание

[править] Параметры

(нет)

[править] Возвращаемое значение

1) Адрес сохранённого объекта Pointer.
2) Адрес объекта void*, который соответствует вышеупомянутым требованиям.

[править] Примечание

Если объект, на который указывает возвращаемое значение, не был перезаписан, он равен значению, хранящемуся в адаптированном Smart объекте до построения.

В обычных реализациях объектное представление каждого Pointer, который является типом указателя, совместимо с представлением void*, и поэтому эти реализации обычно хранят void* объект в хранилище для объекта Pointer, дополнительное хранилище не требуется:

  • Если реализация включает анализ псевдонимов на основе типов (который опирается на строгое правило псевдонимов), можно использовать правильно выровненный подобъект-элемент std::byte[sizeof(void*)], и обе функции преобразования возвращают адрес объектов, неявно созданных в массиве.
  • Иначе подобъект-элемент Pointer может использоваться для обеих функций преобразования, а (2) может напрямую возвращать свой адрес reinterpret_cast в void**.

Если Pointer является типом указателя, объектное представление которого несовместимо с объектным представлением void*, может потребоваться дополнительный флаг bool для записи того, выполнилась ли (1) (или (2)).

[править] Пример