Можем ли мы проверить указатель, чтобы убедиться, что это правильный адрес?

Моя идея - напечатать объект, на который он указывает. Я думаю, что действительный указатель должен иметь действительный объект. Если мы пытаемся распечатать объект, мы проверяем, является ли указатель действительным. Я прав?

2 ответа

Решение

Я думаю, что действительный указатель должен иметь действительный объект.

Да, это определение правильного указателя.

Если мы пытаемся распечатать объект, мы проверяем, является ли указатель действительным.

К сожалению, вы не можете. Вы можете проверить, является ли указатель нулевым; но если он не был инициализирован должным образом или если он указывал на уничтоженный объект, он не будет ни действительным, ни нулевым.

Если вам нужен достаточно умный указатель, чтобы знать, действителен ли он, вам понадобится умный указатель.

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

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

Но этого недостаточно, плохо сформированные коды могут иметь недействительные указатели, и его программист найдет их сложными. Например, рассмотрите возможность возврата указателя на локальный временный объект, который будет уничтожен после выхода из функции. Поэтому вы должны управлять ими в коде.

Сначала старайтесь избегать указателей. Если они вам нужны, используйте умные указатели. Если вам нужно использовать пустой указатель, напишите правильно сформированный код и отслеживайте указатели, правильно используя выделение / освобождение и нулевое значение.

Другие вопросы по тегам