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 |
добавлена условная спецификация исключений |
См. также
| возвращает указатель на управляемый объект (публичная функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/memory/unique_ptr/operator*