Я думаю, что вы смущены, потому что arretCourant
- это , а не a std::shared_ptr
. Это std::set
итератор, ссылающийся на элемент std::set
, который равен a std::shared_ptr
.
Итак, чтобы вызвать метод объекта, std::shared_ptr
указывает на то, что вам нужно сначала разыменовать итератор, чтобы получить ссылку на std::shared_ptr
, а затем разыменовать снова, чтобы получить ссылку на объект, на который указывает std::shared_ptr
. Поэтому для вызова метода для этого объекта используйте:
(*arretCourant)->methodName()
std::shared_ptr
перегрузка оператора ->
, чтобы он вызывал метод для объекта, на который указывает объект, а не для самого std::shared_ptr
. Он также перегружает оператор косвенного обращения *
, чтобы вернуть ссылку на объект, на который он указывает, поэтому
(**arretCourant).methodName()
также работает.
Если вы используете arretCourant->methodName()
, вы разыменовываетеитератор, но не std::shared_ptr
, поэтому вы звоните methodName()
на std::shared_ptr
.