Spec-Zone.ru › C++

std::unique_ptr<T,Deleter>::operator*, std::unique_ptr<T,Deleter>::operator->

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*.

Примечания

Использование std::add_lvalue_reference необходимо для возможности создания std::unique_ptr<void> так как void& не разрешено в C++, в то время как std::add_lvalue_reference<void> порождает void. Подробности см. в LWG673.

Пример

#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++.

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

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/memory/unique_ptr/operator*

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API