Согласно этой статье, http://msdn.microsoft.com/en-us/library/ms177197.aspx в MSDN, мы должны освободить неуправляемые ресурсы в финализаторе и управляемые ресурсы в деструкторе. т.е. следующий шаблон:
// destructors_finalizers_1.cpp
// compile with: /clr /c
ref struct A {
// destructor cleans up all resources
~A() {
// clean up code to release managed resource
// ...
// to avoid code duplication
// call finalizer to release unmanaged resources
this->!A();
}
// finalizer cleans up unmanaged resources
// destructor or garbage collector will
// clean up managed resources
!A() {
// clean up code to release unmanaged resource
// ...
}
};
Почему бы просто не поместить все это в деструктор и не выбросить финализатор? Это потому, что существует вероятность того, что объект все еще может быть неопределенно очищен сборщиком мусора?