Heim >Backend-Entwicklung >C++ >Wie funktioniert std::shared_ptr für die willkürliche Bereinigung beim Herunterfahren?

Wie funktioniert std::shared_ptr für die willkürliche Bereinigung beim Herunterfahren?

Susan Sarandon
Susan SarandonOriginal
2024-10-30 14:34:11495Durchsuche

How does std::shared_ptr<void> Arbeit für willkürliche Bereinigung beim Herunterfahren? 
Arbeit für willkürliche Bereinigung beim Herunterfahren? " />

Warum std::shared_ptr funktioniert

Entgegen den Erwartungen kann std::shared_ptr verwendet werden, um beim Herunterfahren eine beliebige Bereinigung durchzuführen, selbst wenn std::shared_ptr

Typlöschung

Wenn ein shared_ptr erstellt wird, kapselt es den eigenen Zeiger zusammen mit einer Löschfunktion ruft diese Funktion normalerweise standardmäßig auf, kann jedoch über den Konstruktor anders konfiguriert werden. Bei der Zerstörung des shared_ptr wird der gespeicherte Löscher aufgerufen, der die Bereinigung des Objekts auslöst.

Um die Typlöschung zu verstehen, Betrachten Sie das folgende vereinfachte Beispiel mit std::function:

template 
void delete_deleter(void *p) {
    delete static_cast(p);
}

template 
class my_unique_ptr {
public:
    my_unique_ptr(T *p, void(*deleter)(void *p) = &delete_deleter) 
        : p(p), deleter(deleter) 
    {}

    ~my_unique_ptr() {
        deleter(p);
    }

private:
    T *p;
    void(*deleter)(void *);
};

int main() {
    my_unique_ptr p(new double);
}

Hier kann my_unique_ptr aus einem Zeiger eines beliebigen Typs erstellt werden. Der Löscher speichert die typspezifische Löschfunktion und stellt so sicher, dass die Funktion korrekt ist Der Destruktor wird während der Bereinigung aufgerufen.

std::shared_ptr und Typlöschung

Geteilte Zeiger verwenden auch Typlöschung. Beim Kopieren oder standardmäßigen Erstellen eines shared_ptr von einem anderen bleiben die Löschinformationen erhalten. Dies bedeutet, dass ein shared_ptr erstellt aus einem shared_ptr behält das notwendige Wissen bei, um den entsprechenden Destruktor aufzurufen, auch wenn er in shared_ptr umgewandelt wird.

Gemäß dem C-Standard ist dieses Verhalten garantiert. Implementierungen können die Interna von std::shared_ptr nicht in einer Weise ändern, die diese Funktionalität beeinträchtigen würde. Daher ist die Verwendung von std::shared_ptr denn willkürliche Bereinigung ist eine legitime und zuverlässige Technik.

Das obige ist der detaillierte Inhalt vonWie funktioniert std::shared_ptr für die willkürliche Bereinigung beim Herunterfahren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn