Namespaces
Variants

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

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
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 Objekt, das von * this gehalten wird.

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

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.

Inhaltsverzeichnis

Rückgabewert

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

Exceptions

1) Kann eine Ausnahme werfen, falls pointer einen werfenden operator * besitzt.

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. Details finden Sie unter LWG673 .

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&)

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 * könnte potenziell werfend sein
selbst wenn * get ( ) noexcept war
fügte eine bedingte
Ausnahmespezifikation hinzu
LWG 4148 C++23 operator * könnte eine hängende Referenz zurückgeben falls
element_type* sich von Deleter::pointer unterscheidet
das Programm ist in diesem Fall
fehlerhaft

Siehe auch

gibt einen Zeiger auf das verwaltete Objekt zurück
(öffentliche Elementfunktion)