Почему мне не нужно проверять, являются ли ссылки недействительными / нулевыми? - PullRequest
36 голосов
/ 26 марта 2010

Чтение http://www.cprogramming.com/tutorial/references.html, это говорит:

В общем, ссылки должны всегда быть действительным, потому что вы должны всегда инициализировать ссылку. Это означает что, за исключением некоторых странных обстоятельства (см. ниже), вы можете быть уверен, что с помощью ссылки просто как использование простого старого без ссылки переменная. Вам не нужно проверять, чтобы убедитесь, что ссылка не указывая на NULL, и вы не получите укушен неинициализированной ссылкой что вы забыли выделить память для.

Мой вопрос: откуда мне знать, что память объекта не была освобождена / удалена ПОСЛЕ того, как вы инициализировали ссылку.

Что сводится к тому, что я не могу принять этот совет о вере, и мне нужно лучшее объяснение.

Может кто-нибудь пролить свет?

Ответы [ 11 ]

0 голосов
/ 26 марта 2010

Я думаю, что это "зависит". Я знаю, что это не ответ, но это действительно зависит. Я думаю, что кодирование в обороне - хорошая практика для подражания. Теперь, если ваша дорожка стека имеет глубину 10 уровней, и любой сбой в трассировке приводит к сбою всей операции, тогда непременно проверьте на верхнем уровне и дайте всем исключениям подняться на вершину. но если вы можете восстановить от кого-то, передавшего вам нулевую ссылку, проверьте, где это уместно. По моему опыту, когда мне приходится объединять код с другими компаниями для совместной интеграции, проверка (и ведение журнала) всего на уровне общедоступного API позволяет отклонить указание пальцем, которое происходит, когда интеграция не идет, как ожидалось.

...