Я работаю над кодом, написанным на MC++ (управляемые расширения C++) Я знаю, что деструктор преобразуется в Finalize после компиляции.Деструктор, вызываемый более 10000 раз в mC++
Но при выполнении образца эта финализация вызывается более 10000 раз. Этот призыв отображается в журнале отладки файла, как: -
Finalize() - Entry
Finalize() - Exit
Finalize() - Entry
Finalize() - Exit
.
.
.
.
& so on..
Я хочу знать причину этих многочисленных вызовов окончательной доработки. Каковы могут быть возможные причины?
Эти множественные вызовы для завершения отображаются в моих журналах Debug. Также, целесообразно ли размещать журналы отладки внутри деструктора (финализировать) при кодировании в mC++?
Код деструктор, как: -
~Destructor()
{
//Debug Entry log
.......
if(condition)
{
//some code
}
else
{
ReRegisterForFinalize(this);
}
//Debug Exit log
}
Кроме того, GC :: ReRegisterForFinalize (объект) метод добавляет текущий OBJ в очередь финализации для завершения. Теперь после вызова этого метода, точно после того, сколько времени будет вызываться finalize? будет ли окончательная редакция вызываться немедленно или она является недетерминированной?
Как любой может ответить на этот вопрос, если вы не включите часть своего кода? – john
Где вы звоните ReRegisterForFinalize? ReRegisterForFinalize может привести к завершению работы объекта более одного раза, даже если он уже завершен. Посмотрите пример этого метода в MSDN. Если вы вызовете его в деструкторе, ваш объект может быть финализирован много раз. – Botz3000
@ Botz3000 ReRegisterForFinalize вызывается внутри деструктора. Но если объект завершен, зачем его нужно снова называть? Кроме того, следует ли размещать журналы отладки внутри деструктора или нет? Я имею в виду, правильно ли разместить лог-файлы внутри деструктора? – User1234