Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

освобождение строковых параметров класса


NovichoK2 ©   (2015-03-23 21:52:00) 

смотрю одну библиотеку для чтения тегов mp3 файлов. есть такой код:

TID3LyricsFrame = class
       ID: String;
       Data: String;
end;

LyricsFrame:= TID3LyricsFrame.Create;
LyricsFrame.data:= xxxx;
...
затем уничтожается просто:

FreeAndNil(LyricsFrame);

подскажите, утечки памяти тут не будет, строковые параметры освободятся правильно?

или вначале нужно присвоить пустую строку и затем удалить?

LyricsFrame.data:= '';
FreeAndNil(LyricsFrame);

или это с Pchar я перепутал? ))


  (2015-10-20 19:32:00) [1]

Удалено модератором


кгшзх   (2015-03-24 08:29:00) [2]

автор думает, что если стринг это просто переменная то все в порядке.
а если сделать поле класса типа стринг, то компилятор типа тупой и не заметит что ему надо подсчитывать ссылки и на этот стринг.

хотя разницы никакой нет абсолютно.


KilkennyCat   (2015-03-24 03:57:00) [3]


> Германн ©   (24.03.15 02:16) [5]

именно поэтому некорректно и неоднозначно говорить о присвоении переменной пустого значения как об освобождении памяти.
да и вообще, в моем случае одно, у кгшзх другое, а автора ваще создание объекта, со своими методами и т.д., где вдруг уничтожение объекта требует внешних действий внутри объекта.


Германн   (2015-03-24 02:16:00) [4]

А блин. Не заметил var а :String[24]
Дык в этом случае не может быть никакой речи об "освобождении памяти". Память под String[24] выделена навечно. Вплоть до закрытия приложения.


Германн   (2015-03-24 02:06:00) [5]


> KilkennyCat ©   (23.03.15 22:04) [2]
>
> как-то неправильно звучит: присвоить пустую строку...
> например:
> есть var а :String[24];
> какая разница между a ="лрппчрячпспмоилтдждлорпа" и а =
> "" ?
>
> имеет смысл вести беседу об освобождении памяти, разыменовании
> указателей и т.д.

Присвоение переменной типа string значения '' это и есть освобождение памяти выделенной под эту строку, если на неё более нет других ссылок. Если есть ещё ссылки, то счётчик ссылок уменьшается на единицу.


кгшзх   (2015-03-23 22:19:00) [6]

подскажите, утечки памяти тут не будет, строковые параметры освободятся правильно?

а чем твое "тут" отличается от этого "тут" ?

function why()
var mystring : string;
begin
mystring := 'ну а здесь почему бы не быть утечке?';
end;

или ты и в этом случае боишься утечки?


KilkennyCat   (2015-03-23 22:04:00) [7]

как-то неправильно звучит: присвоить пустую строку...
например:
есть var а :String[24];
какая разница между a ="лрппчрячпспмоилтдждлорпа" и а = "" ?

имеет смысл вести беседу об освобождении памяти, разыменовании указателей и т.д.
и тогда ответ будет ясен.


MBo   (2015-03-23 22:02:00) [8]

Освободятся. Компилятор справится.


Наверх

Титульная страница Поиск, карта сайта Написать письмо