Существует ли причина звонить, удаляют в C++, когда программа выходит так или иначе?

Это не имеет ничего общего с Angular, а скорее с тем, как работает Javascript. По сути, ваш код не является синхронным, как вы ожидаете, потому что ваш вызов getUserById, скорее всего, асинхронный.

Это означает, что Javascript не будет ждать, пока не будет вызвана функция обратного вызова getUserById. Вместо этого он просто перейдет к следующей строке кода, которая, по-видимому, в данном случае является строкой console.log(11), поскольку операторы if оцениваются как ложные.

44
задан Community 23 May 2017 в 12:10
поделиться

7 ответов

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

Большинство операционных систем освободит память, когда Ваша программа закончится. Но это - хорошая практика для освобождения его самостоятельно, и как я сказал выше ОС, не назовет деструктор.

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

69
ответ дан Brian R. Bondy 26 November 2019 в 21:46
поделиться

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

24
ответ дан Ferruccio 26 November 2019 в 21:46
поделиться

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

7
ответ дан Sebastian Mach 26 November 2019 в 21:46
поделиться

Думайте о своем классе A необходимость разрушить.
Если Вы не звоните delete на a, тот деструктор не назовут. Обычно, это не будет действительно иметь значения, заканчивается ли процесс так или иначе. Но что, если деструктор должен выпустить, например, возражает в базе данных? Сбросить кэш к файлу журнала? Записать кэш памяти обратно к диску?

Вы видите, это не просто "хорошая практика" для удаления объектов, в некоторых ситуациях это требуется.

6
ответ дан Unihedron 26 November 2019 в 21:46
поделиться

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

3
ответ дан Mr Fooz 26 November 2019 в 21:46
поделиться

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

3
ответ дан Unihedron 26 November 2019 в 21:46
поделиться

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

2
ответ дан RvdK 26 November 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: