std::inout_ptr_t<Smart,Pointer,Args...>:: operator Pointer*, std::inout_ptr_t<Smart,Pointer,Args...>:: operator void**
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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.
Pointer
-Objekts.
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
Pointer
-Objekts.
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:
- Falls die Implementierung typbasierte Alias-Analyse aktiviert (die auf der strikten Aliasing-Regel basiert), kann ein korrekt ausgerichtetes std:: byte [ sizeof ( void * ) ] -Mitgliedssubobjekt verwendet werden, und beide Konvertierungsfunktionen geben die Adresse von Objekten zurück, die implizit innerhalb des Arrays erstellt wurden .
-
Andernfalls kann ein
Pointer-Mitgliedssubobjekt für beide Konvertierungsfunktionen verwendet werden, und (2) kann seine Adresse direkt reinterpret_cast zu void ** zurückgeben.
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
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |