Существуют ли различные варианты использования стрелки в виде знака «->», используемые указателями в C ++? Как именно это используется? - PullRequest
0 голосов
/ 18 марта 2020

Существует ли различное использование символа ->? (Я думаю, это называется перегрузкой).

Одна из них, которую я знаю, это то, что указатель использует ее для доступа к элементу объекта, на который указывает указатель. Например:

class fruit{
      char colour[10];
};

fruit mango;
fruit *pointertofruit = &mango;  // Will it work without using the '&'?
pointertofruit->colour = '______';

Могу ли я считать, что указатель говорит, что " Я указываю на объект, элемент данных которого 'color', поэтому позвольте мне сделать это '______'"

1 Ответ

2 голосов
/ 18 марта 2020

Существует два варианта использования ->:

  • для разыменования необработанного указателя для доступа к члену (как вы описываете).

  • это оператор, который класс / структура может перегружать , чтобы возвращать все, что он хочет, при условии, что что-то может быть разыменовано ->. чаще всего выполняется в классах интеллектуальных указателей, таких как std::unique_ptr / std::shared_ptr, CComPtr / CComQIPtr и т. Д. c для разыменования внутреннего удерживаемого указателя, например:

class fruit_ptr {
    fruit *m_f;
public:
    fruit_ptr(fruit *f) : m_f(f) {}
    ~fruit_ptr() { delete m_f; }
    fruit* operator->(){ return m_f; }
};

fruit_ptr pointertofruit(new mango);
pointertofruit->colour = ...; // calls: pointertofruit.operator->()->colour = ...;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...