std::inout_ptr_t<Smart,Pointer,Args...>::~inout_ptr_t
| ~inout_ptr_t(); |
(seit C++23) | |
Setzt das angepasste Smart-Objekt zurück mit dem Wert des modifizierten Pointer-Objekts (oder des void*-Objekts, wenn operator void**() aufgerufen wurde) und den erfassten Argumenten. release() kann für das angepasste Smart-Objekt aufgerufen werden, wenn es nicht vom Konstruktor aufgerufen wurde.
Seien
-
sbezeichnet das angepassteSmart-Objekt, -
args...bezeichnet die erfassten Argumente, -
pbezeichnet den Wert des gespeichertenPointeroder static_cast<Pointer>(*operator void**()), wenn operator void** aufgerufen wurde, -
SPsei- Smart::pointer, wenn dieser gültig ist und einen Typ bezeichnet, andernfalls,
- Smart::element_type*, wenn Smart::element_type gültig ist und einen Typ bezeichnet, andernfalls,
- std::pointer_traits<Smart>::element_type*, wenn std::pointer_traits<Smart>::element_type gültig ist und einen Typ bezeichnet, andernfalls,
-
Zeiger,
- /*do-release*/ bezeichnet s.release(), wenn der Konstruktor nicht release() aufruft, andernfalls leer.
Wenn Smart ein Zeigertyp ist, führt der Destruktor
- s = static_cast<Smart>(p); aus, und das Programm ist schlecht geformt, wenn sizeof...(Args) > 0;
andernfalls, wenn s.reset(static_cast<SP>(p), std::forward<Args>(args)...) wohlgeformt ist, führt der Destruktor
- /*do-release*/; if (p) { s.reset(static_cast<SP>(p), std::forward<Args>(args)...); };
andernfalls, wenn std::is_constructible_v<Smart, SP, Args...> true ist, führt der Destruktor
- /*do-release*/; if (p) { s = Smart(static_cast<SP>(p), std::forward<Args>(args)...); };
andernfalls ist das Programm schlecht geformt.
[bearbeiten] Hinweise
Die Implementierung kann beim Konstruieren Speicher für die benötigte Datenstruktur von Smart (z. B. einen Steuerblock) zuweisen, um nicht-auslösende Arbeiten dem Destruktor zu überlassen.
Per Wert erfasste Argumente werden nach dem Zurücksetzen zerstört.
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3897 | C++23 | der Destruktor aktualisierte keinen rohen Zeiger auf den Nullwert | tut er |