Namensräume
Varianten
Aktionen

std::inout_ptr_t<Smart,Pointer,Args...>::~inout_ptr_t

Von cppreference.com
< cpp‎ | memory‎ | inout ptr t
 
 
Speicherverwaltungsbibliothek
(nur Exposition*)
Algorithmen für uninitialisierten Speicher
(C++17)
(C++17)
(C++17)
Beschränkte uninitialisierte
Speicher-Algorithmen
C-Bibliothek

Allocatoren
Speicherressourcen
Unterstützung für Garbage Collection
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
Uninitialisierter Speicher
Explizites Lebenszeitmanagement
 
 
~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

  • s bezeichnet das angepasste Smart-Objekt,
  • args... bezeichnet die erfassten Argumente,
  • p bezeichnet den Wert des gespeicherten Pointer oder static_cast<Pointer>(*operator void**()), wenn operator void** aufgerufen wurde,
  • SP sei
    • 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