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

1) Returns the object owned by * this , equivalent to * get ( ) .
2) Returns a pointer to the object owned by * this , i.e. get ( ) .

Exceptions

1) May throw if 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)