Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TStringlist и его Try и Finally, Простенький вопрос 
V
    Опции темы
Canada
  Дата 24.3.2009, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Вот http://forum.vingrad.ru/topic-174701.html я почитал, но МеталФан был прав..У новичка (у меня) после прочтения - каша в голове.

Я это к тому, что вот я не использовал Try и Finally, а работал с переменной типа TStringList Как с обычным мемо. И все работает! А ведь THandle, еще и .Free использует! 
Меня как новичка интересует такие вопросы:

1) А что будет если не использовать эти Try и Finally?Т.е. если я на 100% уверен, что ошибки в коде не будет. 

2) А вот без .Free я так понимаю, эта переменная типа ТСтрингЛист так и останется в памяти? 

3) А можно .Free использовать без Try и Finally?
PM MAIL   Вверх
CodeMonkey
Дата 24.3.2009, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(Canada @  24.3.2009,  15:15 Найти цитируемый пост)
 А что будет если не использовать эти Try и Finally?

try/finally - это своего рода ремни и подушка безопасности. Последствия НЕ использования - можете представить сами.

Цитата(Canada @  24.3.2009,  15:15 Найти цитируемый пост)
Т.е. если я на 100% уверен, что ошибки в коде не будет.

Вы не можете быть на 100% уверены.

Цитата(Canada @  24.3.2009,  15:15 Найти цитируемый пост)
А вот без .Free я так понимаю, эта переменная типа ТСтрингЛист так и останется в памяти? 

Free удаляет объект (вызывает деситруктор). Если объект не удалять - он останется висеть до конца программы. Обычно это называют утечкой памяти. Это не очень страшо в клиентских программах (да, это - баг, это - плохо, но это терпимо), а для серверных - вот страшилка.
Самое обычное правило просто: кто объект создал - тот его и удаляет. Если вы его создавали - вы и обязаны его удалить. Но, конечно же, из этого правила есть вполне очевидные исключения.

Цитата(Canada @  24.3.2009,  15:15 Найти цитируемый пост)
А можно .Free использовать без Try и Finally?

Можно. Но ремней безопасности уже не будет.

Рекомендую.

Это сообщение отредактировал(а) CodeMonkey - 24.3.2009, 15:35


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
MetalFan
Дата 24.3.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(Canada @  24.3.2009,  15:15 Найти цитируемый пост)
Т.е. если я на 100% уверен, что ошибки в коде не будет. 

на 100% ни в чем нельзя быть уверенным. если ты думаешь, что уверен на 100%, значит ты что-то еще не знаешь и не учитываешь ;)

и еще бы неплохо привести куски кода, чтобы было ясно, о чем речь, без захода по ссылке.



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
vladimir74
Дата 24.3.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 241
Регистрация: 28.11.2006

Репутация: нет
Всего: 3



Цитата(Canada @  24.3.2009,  13:15 Найти цитируемый пост)
1) А что будет если не использовать эти Try и Finally?Т.е. если я на 100% уверен, что ошибки в коде не будет. 

ничего не будет, пока не возникнет ошибка smile

Цитата(Canada @  24.3.2009,  13:15 Найти цитируемый пост)
2) А вот без .Free я так понимаю, эта переменная типа ТСтрингЛист так и останется в памяти? 

да, но только до тех пор пока деструктор не решит ешо уничтожить. Например при закрытии программы

Цитата(Canada @  24.3.2009,  13:15 Найти цитируемый пост)
3) А можно .Free использовать без Try и Finally? 

можно

Добавлено через 56 секунд
Цитата(MetalFan @  24.3.2009,  13:37 Найти цитируемый пост)
и еще бы неплохо привести куски кода, чтобы было ясно, о чем речь, без захода по ссылке.

во smile пока прочитал тот топик, уже трое ответили...

Добавлено через 1 минуту и 42 секунды
к пункту 3 ...
можно, но не нужно... ;)
--------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ.
PM MAIL   Вверх
Canada
Дата 24.3.2009, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 153
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Кусок кода, это выйдет всю программу выкладывать.Т.е. я просил объяснить принцип работы, и вы это сделали на Отлично!. Дело в том, что у меня не было проблемы еще с этим. Но смысл я уже на практике понял. Спасибо вам огромное! Т.е. я ообще с TStringList раньше не работал..Спасибо!
PM MAIL   Вверх
CodeMonkey
Дата 25.3.2009, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



TStringList тут как-бы вообще ни при чём. Это общие принципы/правила.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
THandle
Дата 25.3.2009, 16:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



Попробуй два кода(самый примитив, что пришло в голову сейчас...) вне среды(не в Delphi, а просто в Windows):

Код

procedure TForm2.Button1Click(Sender: TObject);
var
  S: TStringList;
begin
  S := TStringList.Create;
  try
    S.Add('SomeTest');
    ShowMessage(S[S.Count]);
  finally
    S.Free;
    ShowMessage('Msg');
  end;
end;


Код

procedure TForm2.Button1Click(Sender: TObject);
var
  S: TStringList;
begin
  S := TStringList.Create;
  S.Add('SomeTest');
  ShowMessage(S[S.Count]);
  S.Free;
  ShowMessage('Msg');
end;

PM   Вверх
Kbl4AH
Дата 25.3.2009, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 741
Регистрация: 1.4.2008
Где: Вятка

Репутация: 4
Всего: 15



THandle, пример наглядный, попробовал... smile 
Теперь стало понятно окончательно...
PM MAIL ICQ   Вверх
Poseidon
Дата 26.3.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(Canada @  24.3.2009,  15:15 Найти цитируемый пост)
если я на 100% уверен, что ошибки в коде не будет.
Есть такая коварная ошибка, которая может возникнуть где угодно и по коду и не скажешь что она именно тут может возникнуть. Завется она "Out of memory". Быть на 100% уверенным что этой ошибки не возникнет невозможно, ведь помимо твоей программы в ОС выполняется еще куча всего и знать заранее сколько кому нужно будет памяти и сколько вообще памяти на компе невозможно.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0629 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.