Разница между деструкторами в C++ и методом Finalize в C# заключается в том, что у этих понятий разные механизмы работы и области применения. 12
Деструкторы в C++ — это специальные функции класса, которые автоматически вызываются, когда объект выходит из области видимости или явно удаляется. 1 Деструкторы используются для очистки и освобождения ресурсов, связанных с объектом. 1 В C++ момент вызова деструктора определён жёстко: он вызывается непосредственно перед выходом объекта из области видимости. 1
Метод Finalize в C# — это финализатор, который автоматически вызывается средой исполнения в промежутке времени между моментом, когда объект опознаётся сборщиком мусора как неиспользуемый, и моментом удаления объекта. 2 Финализатор всегда вызывается перед уничтожением объекта сборщиком мусора, но момент уничтожения зависит от режима работы сборщика мусора, объёма доступной оперативной памяти и активности использования памяти программой. 2 В отличие от деструкторов, момент вызова финализатора не определён жёстко: он может быть вызван в разное время, и занятые объектом ресурсы всё это время будут оставаться занятыми. 2
Таким образом, деструкторы в C++ обеспечивают детерминированную очистку ресурсов, в то время как метод Finalize в C# позволяет проводить очистку в более непредсказуемых условиях, зависящих от различных факторов.