Freigeben über


unique_ptr-Klasse

Es wird ein Zeiger auf ein Objekt in Besitz gespeichert. Das Objekt ist nicht im Besitz eines anderen unique_ptr-Elements. Das Objekt wird nicht beschädigt, wenn unique_ptr beschädigt wird.

template< class Type, class Del = default_delete<Type> >
    class unique_ptr {
public:
    unique_ptr( );
    unique_ptr( nullptr_t Nptr );
    explicit unique_ptr( pointer Ptr );
    unique_ptr( pointer Ptr,
        typename conditional<is_reference<Del>::value, 
            Del,
            typename add_reference<const Del>::type>::type Deleter);
    unique_ptr (pointer Ptr,
        typename remove_reference<Del>::type&& Deleter);
    unique_ptr (unique_ptr&& Right);
    template<class Type2, Class Del2> unique_ptr( unique_ptr<Type2, Del2>&& Right );
    unique_ptr( const unique_ptr& Right) = delete;
    unique_ptr& operator=(const unique_ptr& Right ) = delete;
};

Parameter

  • Right
    Ein unique_ptr

  • Nptr
    Ein rvalue vom Typ std::nullptr_t.

  • Ptr
    Ein pointer

  • Deleter
    Eine deleter-Funktion, die an unique_ptr gebunden ist.

Ausnahmen

Es werden keine Ausnahmen von unique_ptr generiert.

Hinweise

Die unique_ptr-Klasse löst auto_ptr ab und kann als Element in STL-Containern verwendet werden.

Verwenden Sie die make_unique-Hilfsfunktion, um neue Instanzen von unique_ptr effizient zu erstellen.

unique_ptr verwaltet eine Ressource eindeutig. Jedes unique_ptr-Objekt speichert einen Zeiger auf das Objekt, das es besitzt, oder speichert einen NULL-Zeiger. Es kann höchstens ein unique_ptr-Objekt eine Ressource besitzen. Wird ein unique_ptr-Objekt, das eine bestimmte Ressource besitzt, beschädigt, wird die Ressource freigegeben. Ein unique_ptr-Objekt kann verschoben, jedoch nicht kopiert werden. Weitere Informationen finden Sie unter Rvalue-Verweisdeklarator: &&.

Die Ressource wird freigegeben, indem ein gespeichertes deleter-Objekt vom Typ Del aufgerufen wird, dem bekannt ist, wie Ressourcen für ein bestimmtes unique_ptr-Objekt zugeordnet werden. Der standardmäßige deleter default_delete<Type> geht davon aus, dass die Ressource, auf die _Ptr zeigt, new zugeordnet wird und dass sie freigegeben werden kann, indem delete _Ptr aufgerufen wird. (Eine partielle unique_ptr<Type[]>-Spezialisierung verwaltet Arrayobjekte, die new[] zugeordnet sind, und verfügt über den Standardwert deleter default_delete<Type[]>, der auf den Aufruf von delete[] _Ptr spezialisiert ist.)

Der gespeicherte Zeiger auf eine zugehörige Ressource stored_ptr ist vom Typ pointer. Er lautet Del::pointer, wenn er definiert ist, und Type * , wenn er nicht definiert ist. Das gespeicherte deleter-Objekt stored_deleter belegt keinen Speicherplatz im Objekt, wenn deleter zustandslos ist. Beachten Sie, dass Del ein Verweistyp sein kann.

Member

Konstruktoren

unique_ptr::unique_ptr

Es gibt sieben Konstruktoren für unique_ptr.

Typedefs

deleter_type

Ein Synonym für den Vorlagenparameter Del.

element_type

Ein Synonym für den Vorlagenparameter Type.

Zeiger

Ein Synonym für Del::pointer, wenn der Wert definiert ist; andernfalls Type *.

Memberfunktionen

unique_ptr::get

Gibt stored_ptr zurück.

unique_ptr::get_deleter

Gibt einen Verweis auf stored_deleter zurück.

unique_ptr::release

speichert pointer() in stored_ptr und gibt seinen vorherigen Inhalt zurück.

unique_ptr::reset

Gibt die zurzeit zugehörige Ressource frei und akzeptiert eine neue Ressource.

unique_ptr::swap

Tauscht die Ressource und deleter mit dem bereitgestellten unique_ptr-Objekt aus.

Operators

operator bool

Der Operator gibt einen Wert eines Typs zurück, der in bool konvertiert werden kann. Das Ergebnis der Konvertierung in bool ist true, wenn get() != pointer(), andernfalls false.

operator->

Die Memberfunktion gibt stored_ptr. zurück.

operator*

Die Memberfunktion gibt *stored_ptr. zurück.

unique_ptr operator=

Weist den Wert eines unique_ptr -Objekts (oder eines pointer-type) dem aktuellen unique_ptr-Objekt zu.

Anforderungen

Header: <Arbeitsspeicher>

Namespace: std

Siehe auch

Referenz

<memory>

Weitere Ressourcen

unique_ptr Member