Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.44 MB
Время: 0.094 c
2-1154721301
AlexTrosh
2006-08-04 23:55
2006.08.27
Как грамотно узнать тип файловой системы


3-1150893952
1qaz
2006-06-21 16:45
2006.08.27
OLE и Access


2-1154643757
drashka
2006-08-04 02:22
2006.08.27
Thandle чем просмотреть?


15-1154422756
Vaitek__
2006-08-01 12:59
2006.08.27
Видео и ДВД


2-1154604925
Dysan
2006-08-03 15:35
2006.08.27
чем можно заменить TXMLDocument?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский