Я немного запутался по этому поводу — пожалуйста, помогите.
Предположим, что программа на C ++ имеет один класс и один объект этого класса.
Я хочу выполнить некоторую задачу, связанную с очисткой, и написал для этого функцию.
Тогда я должен предпочесть вызов этого метода из деструктора или через atexit()
?
Примечание: я знаю назначение деструкторов класса C ++ и atexit()
, Повлияет ли это на производительность? Или какие-то преимущества?
atexit()
зарегистрировать функцию, которая будет вызвана при завершении программы (например, когда main()
вызывает return
или когда exit()
явно где-то называется).
Это помогает вам гарантировать, что некоторые процедуры будут выполняться каждый раз, когда программа завершается, независимо от того, где было вызвано завершение.
когда exit()
вызывается, статические объекты уничтожаются (вызывается деструктор), но не объекты в области локальных переменных и, конечно же, динамически размещаемые объекты (они уничтожаются только при явном вызове delete
).
Если ваши объекты не являются статичными, вы можете зарегистрировать atexit()
функция, чтобы гарантировать, что ваша процедура очистки будет выполнена, в противном случае это будет сделано автоматически.
То есть, если ваша программа использует exit()
совсем. Если ваш код разработан так, чтобы main()
всегда завершается нормально, вы можете просто разместить свой код там.
Других решений пока нет …