Перегрузка оператора-> в C ++ - PullRequest
4 голосов
/ 09 июня 2011

У меня есть класс интеллектуальных указателей, и я хочу перегрузить operator->;это предусмотрено для удобства, поэтому я могу получить доступ к членам класса, содержащимся в интеллектуальном указателе, напрямую.

Я смотрел, как Boost реализует этот оператор в своем шаблоне shared_ptr.Я заметил, что они добавили проверку assert, если указатель действительно ненулевой, прежде чем возвращать его.В настоящее время мой оператор возвращает указатель, не проверяя, является ли он нулевым (по сути, нулевой указатель является неопределенным поведением в моей текущей реализации).Должен ли я также добавить это утверждение?

(Кроме того, как называется этот оператор? Я не смог найти его в Интернете.)

Ответы [ 2 ]

3 голосов
/ 09 июня 2011

Это зависит от вас. Вы могли бы просто задокументировать, что использование его с нулевым указателем не определено и ничего не делать, вы могли бы утверждать, что вы можете вызвать исключение. Там нет правильного ответа. Лично я бы, наверное, скинул исключение.

2 голосов
/ 09 июня 2011

Должен ли я добавить это утверждение также?

Если вы счастливы без этого, тогда все в порядке. Просто убедитесь, что это задокументировано : это важная вещь.

(Кроме того, как называется этот оператор? Я не смог найти его в Интернете.)

На самом деле у него нет имени. Стандарт просто называет его «оператором ->», также называемым «оператором доступа к членам класса» ([expr.const]).

Википедия перечисляет это как "член b объекта, на который указывает a" (где, да, другим операторам даны краткие идентификаторы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...