![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удаление элементов в TStrings [D7, 95/98, XP]
SKIPtr © (2007-09-11 23:24:00)Этот тип относится к коллекциям Я всегда видел что в коллекциях заносился не элемент а указатель на него В TStrings должен заноситься не строка а указатель на неё а для строки берётся место из памяти При удалении строки из коллекции в Turbo Vision надо самому подумать о возращении не нужной переменной в кучу Происходит полное удаление в TStrings переменой при удалении элемента
Игорь Шевченко (2007-09-12 16:32:00) [21]Ega23 © (12.09.07 15:57) [14]
в Delphi нет понятия абстрактного класса. Есть понятие абстрактного метода.
Хотя, может в 2006 уже есть и абстрактный класс - надо знания обновить.
Ega23 (2007-09-12 15:57:00) [22]
> Джо © (12.09.07 02:40) [4]
>
> Собственно, «абстрактными классами» в Делфи можно назвать
> разве что интерфейсы. Ну, или называть таковыми классы,
> имеющие ИСКЛЮЧИТЕЛЬНО ТОЛЬКО абстрактные методы.
А разве абстрактым классом не называется тот класс, у которого есть ХОТЯ БЫ ОДИН свой абстрактный метод и не перекрытый от предка?
В Сях и Джаве, если мне память не изменяет, экземпляр такого класса создать нельзя. В Delphi - иногда можно, но может к abstract error привести
Kolan (2007-09-12 15:39:00) [23]> А причем тут строки в мемо?
Смотри внимательно пост автора:
> Я в основном говорил о TStrings который в TMemoВопрос был
> в том при уничтожении строк ну напр Memo.Clear или Memo.Lines.Clear
> при исчезнавении указателя исчезнет сама строковая переменная
> или динамическую память надо освободить Turbo Vision при
> удалении строки надо выполнить DisposeStr Нужна ли такая
> команда в TStrings
Германн (2007-09-12 14:31:00) [24]
> Kolan © (12.09.07 14:27) [11]
>
> > Троечник :(
>
> Что ты строки в memo каким-то образом освобождаешь вручную?
>
>
А причем тут строки в мемо?
Ты же сказал
> > или динамическую память надо освободить
>
> Ничегоне надо освобождать самому, память освободится можешь
> не беспокоится…
>
Kolan (2007-09-12 14:27:00) [25]> Троечник :(
Что ты строки в memo каким-то образом освобождаешь вручную?
Что если я напишу:
S := 'sdfs';
Memo1.Lines.Add(S);
А потом
Memo1.Lines.Clear;
Мне надо беспокоится об утечках?
Германн (2007-09-12 14:15:00) [26]
> Kolan © (12.09.07 14:10) [9]
> Ничего не надо освобождать самому, память освободится можешь
> не беспокоится…
>
Троечник :(
Kolan (2007-09-12 14:10:00) [27]> Оговорка: впрочем, возможно, что в новейших версиях Делфи
> появились и абстрактные классы как таковые, тут я пас.
Оговорка: впрочем, в новейших версиях Делфи появились и абстрактные классы как таковые.
:)
> или динамическую память надо освободить
Ничего не надо освобождать самому, память освободится можешь не беспокоится
новичёк (2007-09-12 13:35:00) [28]
> Германн © (12.09.07 01:43) [3]
>
> Вот ещё один пример путаницы в терминологии. TStrings не
> абстрактный класс, а базовый...
>
Так и думал, что кто-нибудь придерется. Под абстрактным я имел ввиду класс, имеющий абстрактные методы, создавать экземпляры которого не имеет смысла.
Кстати в .NET так и делается. Класс имеющий абстрактные методы сам помечается abstract. И экземпляры его не создаются вообще.
> icWasya © (12.09.07 09:32) [7]
>
> Кроме строк, в TStrings можно хранить и указатели на какие-
> то объекты.
Не путай человека. В TMemo объекты хранят только извращенцы.
icWasya (2007-09-12 09:32:00) [29]Кроме строк, в TStrings можно хранить и указатели на какие-то объекты.
Например
Strings.AddObject('One',Button1);
Strings.AddObject('Two',Button2);
Вот за этими объектами пользователь должен следить сам, никакого автоматического удаления не происходит.
Германн (2007-09-12 03:29:00) [30]
> SKIPtr (12.09.07 03:05) [5]
>
> Я в основном говорил о TStrings который в TMemo Вопрос был
> в том при уничтожении строк ну напр Memo.Clear или Memo.
> Lines.Clear при исчезнавении указателя исчезнет сама строковая
> переменная или динамическую память надо освободить Turbo
> Vision при удалении строки надо выполнить DisposeStr Нужна
> ли такая команда в TStrings
>
Именно твой вопрос я и имел в виду. Смущала лишь фраза
> надо самому подумать о возращении не нужной переменной в
> кучу
Переменную не надо никуда возвращать. Она как была где-то, так она там и осталась. А вот если для "некоего её содержимого" была выделена память, то эту память надо возвратить. Но для типа String это всё делает сама Дельфи.
SKIPtr (2007-09-12 03:05:00) [31]Я в основном говорил о TStrings который в TMemo Вопрос был в том при уничтожении строк ну напр Memo.Clear или Memo.Lines.Clear при исчезнавении указателя исчезнет сама строковая переменная или динамическую память надо освободить Turbo Vision при удалении строки надо выполнить DisposeStr Нужна ли такая команда в TStrings
Джо (2007-09-12 02:40:00) [32]Собственно, «абстрактными классами» в Делфи можно назвать разве что интерфейсы. Ну, или называть таковыми классы, имеющие ИСКЛЮЧИТЕЛЬНО ТОЛЬКО абстрактные методы. Что недостижимо.
Оговорка: впрочем, возможно, что в новейших версиях Делфи появились и абстрактные классы как таковые, тут я пас.
Германн (2007-09-12 01:43:00) [33]
> TStrings - это абстрактный класс, там ничего не происходит.
> А вот если будешь использовать TStringList
Вот ещё один пример путаницы в терминологии. TStrings не абстрактныйкласс, а базовый как неоднократно недавно говорил АП. Ведь все соответствующие проперти в компонентах типа TMemo, TListBox, TRichEdit... (перечисление всех тут не уместится) имеют тип TStrings.
А насчёт типа String ты прав.
новичёк (2007-09-12 01:17:00) [34]еле понял, что тут написано...
TStrings - это абстрактный класс, там ничего не происходит. А вот если будешь использовать TStringList, то можешь не беспокоиться за память. За тебя все уже сделали. Строковая переменная, которую ты туда засунешь, будет жить независимо от "коллекции". Если интересно, почитай, как устроен тип String.
DrPass (2007-09-12 00:06:00) [35]
> В TStrings должен заноситься не строка а указатель на неё
а) ANSI-строка в Delphi - это и есть указатель
б) А вопрос у тебя в чем? Или ты тут так, поделиться зашел?