![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
освобождение строковых параметров класса
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]Освободятся. Компилятор справится.