std::unique_ptr<T,Deleter>:: operator*, std::unique_ptr<T,Deleter>:: operator->
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Modifiers | ||||
| Observers | ||||
|
unique_ptr::operator*
unique_ptr::operator->
|
||||
| Non-member functions | ||||
|
(C++14)
(C++20)
|
||||
|
(until C++20)
(C++20)
|
||||
|
(C++20)
|
||||
| Helper classes | ||||
|
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
Exceptions
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) |