как определить, был ли освобожден tfilestream?

есть ли способ узнать, используется ли экземпляр потока tfile? например, если я объявляю FS типа tfilestream, записываю в него буфер и, наконец, освобождаю поток с помощью tfilestream.free, могу ли я проверить что-то вроде:

if 
tfilestream.NotActive
then
 //code
if tfilestream.beingused then
 //code
if tfilestream.free = true then
    //code

активные и используемые методы не существуют на самом деле, и мы не можем протестировать tfilestream.free = true, просто придумав это, чтобы дать представление о том, что я пытаюсь спросить


person Omair Iqbal    schedule 27.07.2010    source источник
comment
На самом деле нет способа определить, был ли освобожден объект или нет, поскольку память может быть повторно использована другими объектами. Правильный способ сделать это - в основном не использовать повторно ссылки на объекты после их освобождения, а когда вам это нужно, используйте FreeAndNil, как указал Роберт.   -  person Mason Wheeler    schedule 27.07.2010


Ответы (1)


Вы не можете сделать это так, как вы ожидаете. Но ты и сделай это с FreeAndNil()

var
  FS : TFileStream;
begin
  FS := TFileStream.Create(...);
  try
   // Do Work with TFileSTream 
  finally 
   FreeAndNil(FS);
  end;

  // For some reason you need to check FS is freed.

  if not Assigned(FS) then
  begin
   // Stream was freed.
  end;
end;
person Robert Love    schedule 27.07.2010