Spec-Zone.ru › C++

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*. Если он объявляется, не указано, каков его тип возвращаемого значения, за исключением того, что объявление гарантированно корректно.

Если T имеет тип массива, не указано, объявляются ли какие-либо из operator* и operator->. Если какой-либо из них объявляется, не указано, каков его тип возвращаемого значения, за исключением того, что объявление гарантированно корректно.

(since C++17)

Если сохранённый указатель равен null, поведение не определено.

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

1) *get()
2) 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 в этом случае объявлять не требуется

См. также

get
возвращает сохранённый указатель
(открытая функция-член)

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

Spec-Zone.ru

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