Оператор ->
Оператор -> класса unique_ptr возвращает указатель на объект, которым владеет умный указатель, позволяя обращаться к его членам так же, как через обычный указатель. Оператор не принимает параметров и перегружен таким образом, что при обращении к члену объекта сначала происходит разыменование внутреннего указателя, а затем выбор члена. Если unique_ptr не владеет объектом (хранит nullptr), поведение не определено.
Синтаксис
ptr->member
Вместо ptr подставляется объект класса unique_ptr, а вместо member - имя члена объекта, на который указывает умный указатель.
Пример
Давайте создадим unique_ptr на объект класса Point и обратимся к его полям через оператор ->:
#include <iostream>
#include <memory>
using namespace std;
class Point
{
public:
int x;
int y;
Point(int x, int y) : x(x), y(y) {}
};
int main()
{
unique_ptr<Point> ptr = make_unique<Point>(1, 2);
cout << ptr->x << " " << ptr->y << endl;
return 0;
}
Результат выполнения кода:
1 2
Пример
Давайте вызовем метод объекта через оператор ->:
#include <iostream>
#include <memory>
#include <string>
using namespace std;
class Greeter
{
public:
void hello()
{
cout << "Hello from unique_ptr" << endl;
}
};
int main()
{
unique_ptr<Greeter> ptr = make_unique<Greeter>();
ptr->hello();
return 0;
}
Результат выполнения кода:
"Hello from unique_ptr"
Смотрите также
-
класс
unique_ptr,
который представляет умный указатель с уникальным владением -
оператор
*,
который разыменовывает умный указатель -
метод
get,
который возвращает хранимый указатель -
функция
make_unique,
которая создает объект и возвращает unique_ptr на него