class CSampleClass { public: CSampleClass(); // Constructor. protected: ~CSampleClass(); // Destructor. public: char *string; // Sample class member. } CSampleClass::CSampleClass() { // Allocate memory for our string. string = new char[10]; } ~CSampleClass::CSampleClass() { // Make sure the heap is recovered. delete [] string; }As you can see when an instance of this class goes out of scope the heap allocated to the string pointer will be reclaimed. This is the point to C++ destructors, you know EXACTLY when each objects destructor is called. However in a garbage collected environment this becomes difficult (sometimes impossible) to do so we can't rely on Finalize being called at a deterministic point. C# will apparently provide this functionality using a Dispose() method when Beta 2 ships.