У меня вопрос: откуда мне знать, что память объекта не была освобождена / удалена ПОСЛЕ того, как вы инициализировали ссылку.
Во-первых, никогда никак не может определить, была ли область памяти освобождена / удалена. Это не имеет никакого отношения к тому, является ли это нулем. То же самое верно для указателя. Имея указатель, вы не можете гарантировать, что он указывает на действительную память. Вы можете проверить, является ли указатель нулевым или нет, но это все. Ненулевой указатель может все еще указывать на освобожденную память. Или это может указывать на какое-то место для мусора.
Что касается ссылок, то же самое относится и к тому, что у вас нет способа определить, ссылается ли он на объект, который все еще действителен. Однако в C ++ не существует такой вещи, как «нулевая ссылка», поэтому нет необходимости проверять, является ли ссылка «нулевой».
Конечно, можно написать код, который создает нечто, похожее на «нулевую ссылку», и этот код будет компилироваться. Но это не будет правильно . Согласно стандарту языка C ++, ссылки на нуль не могут быть созданы. Попытка сделать это - неопределенное поведение.
Что сводится к тому, что я не могу принять этот совет о вере, и мне нужно лучшее объяснение
Лучшее объяснение таково: «ссылка указывает на действительный объект, потому что вы устанавливаете его так, чтобы он указывал на действительный объект». Вам не нужно принимать это на веру. Вам просто нужно взглянуть на код, в котором вы создали ссылку. Он либо указывал на действительный объект в то время, либо нет. Если этого не произошло, значит, код неверный и его следует изменить.
И ссылка все еще действительна, потому что вы знаете, что она будет использоваться, поэтому вы позаботились о том, чтобы не аннулировать объект, на который она ссылается.
Это действительно так просто. Ссылки остаются в силе до тех пор, пока вы не уничтожите объект, на который они указывают. Так что не разрушайте объект, на который он указывает, пока ссылка больше не нужна.