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) | (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 es in der Regel neu initialisieren wird.
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
out_ptr_t
-Objekt aufgerufen wurde, darf die andere nicht mehr 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, ist es gleich nullptr .
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 implizit erzeugten Objekten innerhalb des Arrays zurück.
-
Andernfalls kann ein
Pointer-Mitgliedssubobjekt für beide Konvertierungsfunktionen verwendet werden, und (2) kann seine Adresse direkt als 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 |