std::inout_ptr_t<Smart,Pointer,Args...>::operator Pointer*, std::inout_ptr_t<Smart,Pointer,Args...>::operator void**
| operator Pointer*() const noexcept; |
(1) | (seit C++23) |
| operator void**() const noexcept; |
(2) | (seit C++23) |
Exponiert die Adresse eines Pointer- oder void*-Objekts gegenüber einer Fremdfunktion, welche typischerweise den durch ihren Wert repräsentierten Besitz freigibt und ihn dann neu initialisiert.
Pointer-Objekts.Pointer nicht gleich void* ist, und das Programm ist fehlerhaft, wenn Pointer kein Zeigertyp ist.Der Anfangswert des void*-Objekts ist gleich dem Wert des gespeicherten
Pointer-Objekts, konvertiert zu void*, und jede Modifikation daran beeinflusst den im Destruktor verwendeten Pointer-Wert. Der Zugriff auf das void*-Objekt außerhalb der Lebenszeit von *this hat undefiniertes Verhalten.Sobald eine dieser beiden Konvertierungsfunktionen auf einem inout_ptr_t-Objekt aufgerufen wurde, darf die andere nicht mehr darauf aufgerufen werden, andernfalls ist das Verhalten undefiniert.
Inhalt |
[bearbeiten] Parameter
(keine)
[bearbeiten] Rückgabewert
Pointer-Objekts.[bearbeiten] Hinweise
Wenn das von der Rückgabe referenzierte Objekt nicht neu geschrieben wurde, ist es gleich dem Wert, der vom angepassten Smart-Objekt vor der Konstruktion gehalten wurde.
Auf gängigen Implementierungen ist die Objektrepräsentation jedes Pointer, der ein Zeigertyp ist, mit der von void* kompatibel, und daher speichern diese Implementierungen typischerweise das void*-Objekt innerhalb des Speichers für das Pointer-Objekt, kein zusätzlicher Speicher erforderlich.
- Wenn die Implementierung eine typbasierte Alias-Analyse (die auf der Strict-Aliasing-Regel basiert) aktiviert, kann ein korrekt ausgerichtetes std::byte[sizeof(void*)] Member-Subobjekt verwendet werden, und beide Konvertierungsfunktionen geben die Adresse von Objekten zurück, die implizit erstellt wurden innerhalb des Arrays.
- Andernfalls kann ein
Pointer-Member-Subobjekt für beide Konvertierungsfunktionen verwendet werden, und (2) kann direkt seine Adresse zurückgeben, reinterpret_cast zu void**.
Wenn Pointer ein Zeigertyp ist, dessen Objektrepräsentation inkompatibel mit der von void* ist, kann eine zusätzliche bool-Flag benötigt werden, um zu erfassen, ob (1) (oder (2)) aufgerufen wurde.
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |