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.
Эти функции-члены предоставляются только для unique_ptr одиночных объектов, то есть для основного шаблона.
1) Если std::reference_converts_from_temporary_v<std::add_lvalue_reference_t<T>,decltype(*std::declval<pointer>())> является true, программа некорректна. | (начиная с C++23) |
Если get() является нулевым указателем, поведение не определено.
Возвращаемое значение
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++.
| Отчёт об ошибке | Применён к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 2762 | C++11 |
operator* мог потенциально генерировать исключение даже если *get() был noexcept | добавлена условная спецификация исключений |
| LWG 4148 | C++23 |
operator* мог возвращать висячую ссылку, еслиelement_type* отличается от Deleter::pointer | в этом случае программа некорректна |
См. также
| возвращает указатель на управляемый объект (функция-член класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/unique_ptr/operator*