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) |
(since C++11)
(constexpr since C++23) |
|
pointer operator
-
>
(
)
const
noexcept
;
|
(2) |
(since C++11)
(constexpr since C++23) |
operator * and operator - > provide access to the object owned by * this .
These member functions are only provided for
unique_ptr
for the single objects i.e. the primary template.
|
1)
If
std
::
reference_converts_from_temporary_v
< std:: add_lvalue_reference_t < T > , decltype ( * std:: declval < pointer > ( ) ) > is true , the program is ill-formed. |
(since C++23) |
If get ( ) is a null pointer, the behavior is undefined.
Contents |
Return value
Exceptions
pointer
has a throwing
operator
*
.
Notes
The use of std::add_lvalue_reference is to make it possible to instantiate std:: unique_ptr < void > since void & isn't allowed in C++ while std:: add_lvalue_reference < void > produces void . See LWG673 for details.
Example
#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); }
Output:
Foo::bar f(const Foo&)
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2762 | C++11 |
operator
*
might be potentially-throwing
even if * get ( ) was noexcept |
added a conditional
exception specification |
| LWG 4148 | C++23 |
operator
*
could return a dangling reference if
element_type*
differs from
Deleter::pointer
|
the program is ill-
formed in this case |
See also
|
returns a pointer to the managed object
(public member function) |