Пространства имён
Варианты
Действия

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

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования (C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
Динамическое управление памятью
no section name
Ограниченные алгоритмы неинициализированной памяти
no section name
Поддержка сбора мусора
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)
(C++11)(до C++23)



no section name
 
 
<tbody> </tbody>
typename std::add_lvalue_reference<T>::type operator*() const noexcept(noexcept(*std::declval<pointer>()));
(1) (начиная с C++11)
(constexpr начиная с C++23)
pointer operator->() const noexcept;
(2) (начиная с C++11)
(constexpr начиная с C++23)

operator* и operator-> предоставляют доступ к объекту, принадлежащему *this.

Поведение не определено, если get() == nullptr.

Эти функции-элементы предоставляются только для unique_ptr для отдельных объектов, т.е. основного шаблона.

Параметры

(нет)

Возвращаемое значение

1) Возвращает объект, принадлежащий *this, что эквивалентно *get().
2) Возвращает указатель на объект, принадлежащий *this, то есть get().

Исключения

1) Может генерировать исключения, если pointer имеет генерирующий исключения operator*.

Пример

#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);
}

Вывод:

Foo::bar
f(const Foo&)

Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 2762 C++11 operator* может быть потенциально генерирующим
исключения, даже если *get() является noexcept
добавлена спецификация условного исключения

Смотрите также

возвращает указатель на управляемый объект
(public функция-элемент) [править]