Есть ли смысл проверять это == ноль? Я нашел это во время обзора кода.
В стандартном C ++ этого не происходит, поскольку любой вызов нулевого указателя уже является неопределенным поведением, поэтому любой код, основанный на таких проверках, является нестандартным (нет гарантии, что проверка будет выполнена).
Обратите внимание, что это верно и для не виртуальных функций.
Однако некоторые реализации разрешают this==0
, и, следовательно, библиотеки, написанные специально для этих реализаций, иногда используют его как хакерский. Хороший пример такой пары - VC ++ и MFC - я не помню точный код, но я отчетливо помню, как где-то в исходном коде MFC if (this == NULL)
проверял.
Он также может быть там как средство отладки, потому что в какой-то момент в прошлом этот код получал this==0
из-за ошибки в вызывающей программе, поэтому была вставлена проверка, чтобы перехватить будущие экземпляры этого. Утверждение будет иметь больше смысла для таких вещей, хотя.
Если это == ноль, то это означает, что объект удален.
Нет, это не значит. Это означает, что метод был вызван по нулевому указателю или по ссылке, полученной из нулевого указателя (хотя получение такой ссылки уже U.B.). Это не имеет ничего общего с delete
и не требует, чтобы какие-либо объекты этого типа когда-либо существовали.