Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.27;
Скачать: CL | DM;

Вниз

Stream - пустой / не пустой   Найти похожие ветки 

 
kobik.   (2006-08-07 06:37) [0]

Пусть есть процедура с VAR параметром - TMemoryStream, которая производит с ним какие-то действия. MemoryStream в любом случае нужен пустой, а если он не создан, то должен создаться в этой процедуре.

Вот у меня встал вопрос, как это грамотно сделать.

1)
MemoryStream:=TMemoryStream.Create;  
Но ведь если он был создан раньше, то останется кусок неосвобожденной памяти.
2)
if MemoryStream <> nil then MemoryStream.Free;
MemoryStream:=TMemoryStream.Create;
 
А вдруг тот MemoryStream был локальной переменной какой-нибудь функции. Тогда он может быть неравен nil, но при этом MemoryStream.Free приведет к вылету.
3)
try
if MemoryStream <> nil then MemoryStream.Free;
finaly
MemoryStream:=TMemoryStream.Create;
end;
 
Тут уже вопрос, а не лишнее ли это? Может про первые 2 случая я вообще бред сморозил :)
Расскажите как правильно делать?


 
Loginov Dmitry ©   (2006-08-07 08:01) [1]

До первого вызова функции очень желательно ссылку на объект обнулить (если переменная глобальная, то не нужно). А в функции достаточно следующего:

if MemoryStream = nil then
 MemoryStream := TMemoryStream.Create;

А в [0] бредовые "варианты": 1) (Утечка памяти) и 3) (непонимание того, что такое try .. finally .. end)


 
Desdechado ©   (2006-08-07 11:37) [2]

Инициализировать переменные "где попало" ("А вдруг тот MemoryStream был локальной переменной какой-нибудь функции") - дурной тон и прямой путь к скрытым ошибкам.
Если в какую-то функцию нужно передать TMemoryStream (да и любой другой объект) очень рекомендуется его создать заранее и передаватьне через VAR (объекты и так по ссылке передаются). Разрушать объекты после использования очень рекомендуется в том же логическом участке кода, где они созданы. Особенно это касается временных объектов.



Страницы: 1 вся ветка

Текущий архив: 2006.08.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.083 c
6-1143645292
redlord
2006-03-29 19:14
2006.08.27
Проблема с 21 портом (FTP) и не существующим хостом


2-1154705644
Mr tray
2006-08-04 19:34
2006.08.27
cos(1/2*pi)=-4.3711388287e-08


15-1153418279
Dok_3D
2006-07-20 21:57
2006.08.27
Чего все ополчились против Израиля?


1-1153235434
ArtemESC
2006-07-18 19:10
2006.08.27
OwnerDraw в ListBox e


11-1131961137
homm
2005-11-14 12:38
2006.08.27
OwnerDrawVariable и MeasureItem в ListBox