Scroll to navigation

std::unique_ptr::operator*,std::unique_ptr::operator->(3) C++ Standard Libary std::unique_ptr::operator*,std::unique_ptr::operator->(3)

NAME

std::unique_ptr::operator*,std::unique_ptr::operator-> - std::unique_ptr::operator*,std::unique_ptr::operator->

Synopsis


typename std::add_lvalue_reference<T>::type operator*() const (since C++11)
noexcept(noexcept(*std::declval<pointer>())); (1) (constexpr since
C++23)
(since C++11)
pointer operator->() const noexcept; (2) (constexpr since
C++23)


operator* and operator-> provide access to the object owned by *this.


The behavior is undefined if get() == nullptr.


These member functions are only provided for unique_ptr for the single objects i.e.
the primary template.

Parameters


(none)

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

// Run this code


#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
operator* might be potentially-throwing a conditional exception
LWG 2762 C++11 even if specification added
*get() was noexcept

See also


get returns a pointer to the managed object
(public member function)

2024.06.10 http://cppreference.com