Главная страница
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.05 c
6-1144618623
Nikolas
2006-04-10 01:37
2006.08.27
Сетевой движок


4-1146775675
<X>
2006-05-05 00:47
2006.08.27
Работа со шрифтами средствами WinApi


15-1154071589
IceBeerg
2006-07-28 11:26
2006.08.27
Во! Незнал.


15-1154011493
Vlad
2006-07-27 18:44
2006.08.27
Майкрософт шалит? :-)


15-1154599687
3S
2006-08-03 14:08
2006.08.27
Как вернуть..