Freigeben über


weak_ptr-Klasse

Umschließt einen schwach verknüpften Zeiger.

template<class Ty> class weak_ptr {
public:
    typedef Ty element_type;

    weak_ptr();
    weak_ptr(const weak_ptr&);
    template<class Other>
        weak_ptr(const weak_ptr<Other>&);
    template<class Other>
        weak_ptr(const shared_ptr<Other>&);

    weak_ptr& operator=(const weak_ptr&);
    template<class Other>
        weak_ptr& operator=(const weak_ptr<Other>&);
    template<class Other>
        weak_ptr& operator=(shared_ptr<Other>&);

    void swap(weak_ptr&);
    void reset();

    long use_count() const;
    bool expired() const;
    shared_ptr<Ty> lock() const;
    };

Parameter

  • Ty
    Der Typ gesteuert vom schwachen Zeiger.

Hinweise

Die Vorlagenklasse beschreibt ein Objekt, das auf einer Ressource zeigt, die von einem oder mehreren shared_ptr-Klasse-Objekte verwaltet wird. weak_ptr wendet diesen Punkt einer Ressource nicht beeinflussen den Verweiszähler der Ressource ein. Wenn das letzte shared_ptr-Objekt, das die Ressource verwaltet, zerstört wird, wird die Ressource freigegeben, auch wenn weak_ptr-Objekte sind, die auf diese Ressource verweisen. Dies ist zum Vermeiden von Zyklen in den Datenstrukturen Voraussetzung.

weak_ptr-Objektpunkte auf eine Ressource, wenn sie von einem shared_ptr-Objekt erstellt wurde, das diese Ressource besitzt, wenn sie von einem weak_ptr-Objekt erstellt wurde, das auf diese Ressource zeigt, oder wenn diese Ressource an sie mit weak_ptr::operator= zugewiesen wurde. Ein weak_ptr-Objekt stellt nicht direkt auf die Ressource, auf die sie zeigt. Code, dass die Ressource verwenden muss dies jetzt durch ein shared_ptr-Objekt, das die Ressource besitzt, erstellt durch Aufrufen der Memberfunktion weak_ptr::lock. Ein weak_ptr-Objekt ist abgelaufen, wenn die Ressource, der es zeigt auf, da alle shared_ptr-Objekte, dass die Ressource besitzen Sie sind, zerstört wurden freigegeben wurde. lock auf einem weak_ptr-Objekt aufrufen, das abgelaufen ist, erstellt ein leeres shared_ptr Objekt.

Ein leeres weak_ptr Objekt wird nicht auf den Ressourcen und hat keine Anweisung. Die Memberfunktion lock gibt einen leeren shared_ptr Objekt zurück.

Ein Zyklus tritt auf, wenn zwei oder mehr Ressourcen, die durch shared_ptr gesteuert werden Objekte, shared_ptr-Objekte sich gegenseitig verweisen Sie anhalten. Beispielsweise verfügt eine zirkuläre verknüpfte Liste mit drei Elemente einen Kopfknoten N0; dieser Knoten enthält ein shared_ptr-Objekt, das den folgenden Knoten besitzt, N1; dieser Knoten enthält ein shared_ptr-Objekt, das den folgenden Knoten besitzt, N2; dieser Knoten enthält wiederum ein shared_ptr-Objekt, das den Hauptknoten besitzt, N0 und schließt den Zyklus. In dieser Situation wird keine der Verweiszähler überhaupt keinen, und die Knoten des Zyklus werden nicht freigegeben. Um den Zyklus zu vermeiden, sollte dem letzten Knoten N2 ein weak_ptr-Objekt enthalten, das auf N0shared_ptr anstelle eines Objekts zeigt. Da das weak_ptr-Objekt N0 nicht besitzt, wirkt sich dies nicht N0 ), und wenn der letzte Verweis des Programms an dem Hauptknoten zerstört wird, werden die Knoten in der Liste auch zerstört.

Member

Konstruktoren

weak_ptr::weak_ptr

Erstellt ein Objekt vom Typ weak_ptr.

Methoden

weak_ptr::element_type

Der Typ des Elements.

weak_ptr::expired

Testet, ob Besitz abgelaufen ist.

weak_ptr::lock

Erhält exklusiven Besitz einer Ressource.

weak_ptr::owner_before

Gibt true zurück, wenn dieser weak_ptr vor (oder kleiner als) dem bereitgestellten Zeiger sortiert wird.

weak_ptr::reset

Besitze Ressourcen der Versionen.

weak_ptr::swap

Tauscht zwei weak_ptr-Objekte.

weak_ptr::use_count

Anzahlzahl festgelegte shared_ptr-Objekte.

Operatoren

weak_ptr::operator=

Replaces besaß Ressourcen.

Anforderungen

Header: <memory>

Namespace: std

Siehe auch

Referenz

shared_ptr-Klasse

Weitere Ressourcen

<memory> Member