Architecture Net



         

Неуправляемые ресурсы и освобождение ранее выделенной области памяти - часть 3


Класс SimpleLog поддерживает интерфейс IDisposable и таким образом реализует метод Dispose (Освободить ранее выделенную область памяти). Код, освобождающий ресурсы, просто удаляет объект streamWriter. Чтобы удостовериться в том, что для удаленного объекта также не будет вызван метод завершения, вызывается GC: : SuppressFinalize. Завершающий работу объекта деструктор просто делегирует свои функции методу Dispose (Освободить ранее выделенную область памяти). Для контроля над продолжительностью жизни объекта на консоль выводится сообщение из конструктора, из метода Dispose (Освободить ранее выделенную область памяти) и из деструктора.
Вот код тестовой программы:

//DisposeDemo.h
using namespace System;
// использование пространства имен Система;
using namespace System::Threading;
// использование пространства имен
// Система::Организация поточной обработки;
public _gc class DisposeDemo
// класс сборщика мусора DisposeDemo
{ public:
static void Main()
{
SimpleLog *log = new SimpleLog("logl.txt");
log->WriteLine("First line");
// файл регистрации-> WriteLine ("Первая строка");


Pause(); // Пауза
log->Dispose(); // Первое завершение файла регистрации
log->Dispose(); // файл регистрации - испытание -второй
// вызов Dispose
log = new SimpleLog("Iog2.txt");
log->WriteLine("Second line");
// файл регистрации-> WriteLine ("Вторая строка");


Pause (); // Пауза log = new SimpleLog(
"Iog3.txt"); // предыдущий (2-ой) файл
// регистрации освобожден
log->WriteLine("Third line");
// файл регистрации-> WriteLine ("Третья строка");


Pause (); // Пауза
log =0; // последний файл регистрации освобожден
GC::Collect();
// СБОРЩИК МУСОРА:: Собрать ( );
Thread::Sleep(100);
// Поток:: Бездействие (100);
}
private: // частный
static void Pause)) // Пауза
{
Console::Write("Press enter to continue");
// Запись:: ("Нажмите ввод для продолжения");
String *str = Console::ReadLine(); // Строка
}
};




Содержание  Назад  Вперед