Главная страница
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.029 c
6-1144603398
Izolda
2006-04-09 21:23
2006.08.27
Поисковая система


2-1155025071
malyar
2006-08-08 12:17
2006.08.27
сообщение окну : свернуть и развернуть


3-1149146961
vadim14
2006-06-01 11:29
2006.08.27
copy tables with metadata


3-1149573959
Scorpio
2006-06-06 10:05
2006.08.27
Создание кусора или что то на него похожее


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