Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.08.13;
Скачать: CL | DM;

Вниз

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

 
NovichoK2   (2015-03-23 21:52) [0]

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

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

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

FreeAndNil(LyricsFrame);

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

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

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

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


 
MBo ©   (2015-03-23 22:02) [1]

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


 
KilkennyCat ©   (2015-03-23 22:04) [2]

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

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


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

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

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

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

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


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


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

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


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

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


 
KilkennyCat ©   (2015-03-24 03:57) [6]


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

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


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

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

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


 
имя   (2015-10-20 19:32) [8]

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



Страницы: 1 вся ветка

Текущий архив: 2017.08.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.004 c
2-1422502870
Drowsy
2015-01-29 06:41
2017.08.13
Вычисляемые поля ДатаСета.


2-1427136740
NovichoK2
2015-03-23 21:52
2017.08.13
освобождение строковых параметров класса


2-1426513998
dmk
2015-03-16 16:53
2017.08.13
Возможно ли имея имя класса в переменной обратится


2-1443091187
Andrey K
2015-09-24 13:39
2017.08.13
Как заблокировать клавишу?


15-1464384606
Юрий
2016-05-28 00:30
2017.08.13
С днем рождения ! 28 мая 2016 суббота