Namespaces
Variants

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

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
std::inout_ptr_t
Member functions
inout_ptr_t::operator Pointer* inout_ptr_t::operator void**
Non-member functions
operator Pointer * ( ) const noexcept ;
(1) (seit C++23)
operator void ** ( ) const noexcept ;
(2) (seit C++23)

Macht die Adresse eines Pointer oder void * -Objekts für eine externe Funktion verfügbar, die in der Regel den durch ihren Wert repräsentierten Besitz freigibt und ihn anschließend neu initialisiert.

1) Konvertiert * this in die Adresse des gespeicherten Pointer -Objekts.
2) Konvertiert * this in die Adresse eines void * -Objekts. Diese Konvertierungsfunktion nimmt nur an der Überladungsauflösung teil, wenn Pointer nicht identisch mit void * ist, und das Programm ist fehlerhaft, wenn Pointer kein Zeigertyp ist.
Der Anfangswert des void * -Objekts entspricht dem Wert des gespeicherten Pointer -Objekts, konvertiert zu void * , und jede Änderung daran beeinflusst den Pointer -Wert, der im Destruktor verwendet wird. Der Zugriff auf das void * -Objekt außerhalb der Lebensdauer von * this hat undefiniertes Verhalten.

Sobald eine dieser beiden Konvertierungsfunktionen auf ein inout_ptr_t -Objekt aufgerufen wurde, darf die andere nicht darauf aufgerufen werden, andernfalls ist das Verhalten undefiniert.

Inhaltsverzeichnis

Parameter

(keine)

Rückgabewert

1) Die Adresse des gespeicherten Pointer -Objekts.
2) Die Adresse des void * -Objekts, das die oben genannten Anforderungen erfüllt.

Hinweise

Wenn das Objekt, auf das der Rückgabewert zeigt, nicht überschrieben wurde, entspricht es dem Wert, der vom adaptierten Smart Objekt vor der Konstruktion gehalten wurde.

Auf gängigen Implementierungen ist die Objektdarstellung jedes Pointer , das ein Zeigertyp ist, kompatibel mit der von void * , und daher speichern diese Implementierungen typischerweise das void * -Objekt innerhalb des Speichers für das Pointer -Objekt, ohne dass zusätzlicher Speicher benötigt wird:

Wenn Pointer ein Zeigertyp ist, dessen Objektdarstellung inkompatibel mit der von void * ist, kann eine zusätzliche bool -Markierung erforderlich sein, um festzuhalten, ob (1) (oder (2) ) aufgerufen wurde.

Beispiel