Visual C++ .NET/Class/Destructor

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Destructor and finalizer

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; using namespace System::Collections::Generic; ref class MyClass{

   static List<MyClass^>^ instanceTrackingList;
   static MyClas(){
      instanceTrackingList = gcnew List<MyClass^>;
   }
   MyClass(String^ s)
   {
      Label = s;
      instanceTrackingList->Add( this );
   }
   property String^ Label;
   static int EnumerateInstances()
   {
      int i = 0;
      for each (MyClass^ r in instanceTrackingList)
      {
          i++;
          Console::WriteLine( r->Label );
      }
      return i;
   }
   ~MyClass()   // destructor
   {
      this->!MyClass();
   }
   !MyClass()   // finalizer
   {
      instanceTrackingList->Remove( this );
   }

}; int main(){

   MyClass r1("ABC");
   MyClass^ r2 = gcnew MyClass("XYZ");
   int count = MyClass::EnumerateInstances();
   Console::WriteLine("Object count: " + count);
   delete r2;
   count = MyClass::EnumerateInstances();
   Console::WriteLine("Object count: " + count);

}

 </source>


Destructor demo

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; using namespace System::IO; ref class MyClass { public:

   MyClass()
   {
       Closed = false;
   }
   ~MyClass()
   {
       if ( !Closed ) Close();
   }
   void Close()
   {
       // Release unmanaged resources
       Closed = true;
   }

private:

   bool Closed;

}; void main() {

   MyClass^ myObject = gcnew MyClass();
   try
   {
       // Do something
   }
   finally
   {
       // Calls destructor
       delete myObject;
   }

}

 </source>


Destructors and inheritance

<source lang="csharp">

  1. include "stdafx.h"

using namespace System; ref class Base {

  public:
    Base() {}
    ~Base() {  Console::WriteLine("~Base"); }

}; ref class Derived : Base {

  public:
    Derived() { }
    ~Derived() {  Console::WriteLine("~Derived"); }

}; // The destructor will be called at the end of main. int main() {

  Derived d;

}

 </source>