Namensräume
Varianten
Aktionen

std::unique_ptr<T,Deleter>::operator*, std::unique_ptr<T,Deleter>::operator->

Von cppreference.com
< cpp‎ | memory‎ | unique ptr
 
 
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
 
 
typename std::add_lvalue_reference<T>::type operator*() const
    noexcept(noexcept(*std::declval<pointer>()));
(1) (seit C++11)
(constexpr seit C++23)
pointer operator->() const noexcept;
(2) (seit C++11)
(constexpr seit C++23)

operator* und operator-> bieten Zugriff auf das von *this verwaltete Objekt.

Diese Memberfunktionen werden nur für unique_ptr für einzelne Objekte, d. h. die primäre Vorlage, bereitgestellt.

1) Wenn std::reference_converts_from_temporary_v
    <std::add_lvalue_reference_t<T>,
     decltype(*std::declval<pointer>())>
true ist, ist das Programm fehlerhaft.
(seit C++23)

Wenn get() ein Nullzeiger ist, ist das Verhalten undefiniert.

Inhalt

[bearbeiten] Rückgabewert

1) Gibt das von *this verwaltete Objekt zurück, äquivalent zu *get().
2) Gibt einen Zeiger auf das von *this verwaltete Objekt zurück, d. h. get().

[bearbeiten] Ausnahmen

1) Kann auslösen, wenn pointer einen auslösenden operator* hat.

[bearbeiten] Hinweise

Die Verwendung von std::add_lvalue_reference ermöglicht die Instanziierung von std::unique_ptr<void>, da void& in C++ nicht zulässig ist, während std::add_lvalue_reference<void> void erzeugt. Siehe LWG673 für Details.

[bearbeiten] Beispiel

#include <iostream>
#include <memory>
 
struct Foo
{
    void bar() { std::cout << "Foo::bar\n"; }
};
 
void f(const Foo&) 
{
    std::cout << "f(const Foo&)\n";
}
 
int main() 
{
    std::unique_ptr<Foo> ptr(new Foo);
 
    ptr->bar();
    f(*ptr);
}

Ausgabe

Foo::bar
f(const Foo&)

[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 2762 C++11 operator* kann potenziell auslösen
auch wenn *get() noexcept war
eine bedingte
Ausnahmespezifikation hinzugefügt
LWG 4148 C++23 operator* könnte eine hängende Referenz zurückgeben, wenn
element_type* sich von Deleter::pointer unterscheidet
das Programm ist schlecht ge-
formt in diesem Fall

[bearbeiten] Siehe auch

Gibt einen Zeiger auf das verwaltete Objekt zurück
(öffentliche Memberfunktion) [bearbeiten]