Это не имеет ничего общего с Angular, а скорее с тем, как работает Javascript. По сути, ваш код не является синхронным, как вы ожидаете, потому что ваш вызов getUserById
, скорее всего, асинхронный.
Это означает, что Javascript не будет ждать, пока не будет вызвана функция обратного вызова getUserById
. Вместо этого он просто перейдет к следующей строке кода, которая, по-видимому, в данном случае является строкой console.log(11)
, поскольку операторы if оцениваются как ложные.
Важно явно звонить, удаляют, потому что у Вас может быть некоторый код в деструкторе, который Вы хотите выполнить. Как, возможно, запись некоторых данных к файлу журнала. Если Вы позволите ОС освободить Вашу память для Вас, то Ваш код в Вашем деструкторе не будет выполнен.
Большинство операционных систем освободит память, когда Ваша программа закончится. Но это - хорошая практика для освобождения его самостоятельно, и как я сказал выше ОС, не назовет деструктор.
Что касается вызова удаляют в целом, да Вы всегда хотите звонить, удаляют, или иначе у Вас будет утечка памяти в Вашей программе, которая приведет к новому сбою выделений.
Да, это помогает устранить ложные положительные стороны, когда Вы запускаете свою программу через инструмент обнаружения утечки памяти.
Рассмотрите случай, где объект, который будет удален полученный внешний ресурс, который не может быть освобожден безопасно ОС. Если Вы не звоните, удаляют на том объекте, у Вас есть реальная утечка.
Думайте о своем классе A
необходимость разрушить.
Если Вы не звоните delete
на a
, тот деструктор не назовут. Обычно, это не будет действительно иметь значения, заканчивается ли процесс так или иначе. Но что, если деструктор должен выпустить, например, возражает в базе данных? Сбросить кэш к файлу журнала? Записать кэш памяти обратно к диску?
Вы видите, это не просто "хорошая практика" для удаления объектов, в некоторых ситуациях это требуется.
Другая причина того, чтобы явно удалить объекты состоит в том, что, если Ваше приложение имеет утечку реальной памяти, становится легче использовать инструменты как valgrind для нахождения утечек, если Вы не должны отсеивать через "утечки", которые прибывают из того, чтобы не потрудиться вымыться.
Другая причина удалить состоит в том, чтобы избежать ложных аварийных сигналов от детектора утечки, который можно использовать в будущем. Если у Вас есть ложные аварийные сигналы, Вы не можете обратить внимание на реальную утечку, о которой сообщает детектор утечки - оно будет проложено под землей среди ложных в отчете.
всегда удостоверяйтесь, что Вы удаляете его сами. ОС будет заботиться об этом, но исключить ошибки, которых можно легко избежать