std::shared_ptr<T>::operator*, std::shared_ptr<T>::operator->
T& operator*() const noexcept; | (1) |
(since C++11) (constexpr since C++26) |
T* operator->() const noexcept; | (2) |
(since C++11) (constexpr since C++26) |
Разыменовывает сохранённый указатель.
Если T имеет тип (возможно, с квалификатором cv) void, не указано, объявляется ли operator*. Если он объявляется, не указано, каков его тип возвращаемого значения, за исключением того, что объявление гарантированно корректно.
| Если | (since C++17) |
Если сохранённый указатель равен null, поведение не определено.
Возвращаемое значение
*get()
get()
Пример
#include <iostream>
#include <memory>
struct Foo
{
Foo(int in) : a(in) {}
void print() const
{
std::cout << "a = " << a << '\n';
}
int a;
};
int main()
{
auto ptr = std::make_shared<Foo>(10);
ptr->print();
(*ptr).print();
}
Вывод:
a = 10 a = 10
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение согласно опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 2572 | C++11 |
operator* требовалось объявлять, если T имеет квалификатор cv и тип void | в этом случае объявлять не требуется |
См. также
| возвращает сохранённый указатель (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/memory/shared_ptr/operator*