Комментарии 19
В XE4 обещают вроде как ARC — контроль количества ссылок на объекты и автоматическое освобождение объекта, когда он более не используется, а также слабые и сильные ссылки.
+1
Да, в новых версиях прогресс заметен. И там подобны хак уже не нужен.
Но в данной задаче я был ограничен 11й версией. Фактически нужно было в уже готовом коде найти проблему с двойным дестроем. Вот именно идеей появившейся при решении этой конкретной задачи я и поделился.
Но в данной задаче я был ограничен 11й версией. Фактически нужно было в уже готовом коде найти проблему с двойным дестроем. Вот именно идеей появившейся при решении этой конкретной задачи я и поделился.
+1
ARC только для iOS будет. ПОкрайней мере в XE4. Вроде как для андроид в будущих версиях планируют. Для десктопа же все очень туманно.
+2
Простите, но я вообще не понимаю, как можно пытаться вызвать FreeAndNil для строки или числа. В голове не укладывается.
+2
Ну например так. Был TList потом заменили на массив а про FreeAndNil забыли. В общем, не важно как. Важно что в данном случае ничто не защищает от ошибки кроме внимательности программиста.
-1
То есть было var MyObj: TList, а потом сделали Var MyObj: TSomeArray? При такой проблеме согласен, надо какой-то уведомитель, что образовалась нештатная ситуация. Однако, подобное будет видно позже, в профайлере памяти, ведь потечет память, выделенная под массив (ссылка на него станет = nil, а содержимое останется).
Если так, то я решаю проблему проще. У каждой ссылки на объект есть постфикс — что это такое. Например, Var MyList: TList, а потом бы стало Var MyArray: TSomeArray. Рекомендую)
Если так, то я решаю проблему проще. У каждой ссылки на объект есть постфикс — что это такое. Например, Var MyList: TList, а потом бы стало Var MyArray: TSomeArray. Рекомендую)
+1
ну у нас переодически абстрактные классы стал интерфейсами становятся. компилятор ничего не говорит, но естественно при вызов FreeAndNil — AV получаем. Так что проблем с этой функцией есть
+1
Да, получается, это — смешанная проблема внимательности разработчика и технологии в целом. ИМХО, надо прокачивать как внимательность, так и технологию; внимательность — в первую очередь.
+1
>>это — смешанная проблема внимательности разработчика и технологии в целом.
ну возможно в 80х годах — это была и смешанная проблема, но в 21 веке — это проблема отсталости технологии. Печалит, что даже в совремнных версиях дельфи я не могу нормальный FreeAndNil написать. Максимум, что можно — TObjectHelper.FreeAndNil [ TMyObject ] (MyObject) // вместо [] — угловые скобки читать
ну возможно в 80х годах — это была и смешанная проблема, но в 21 веке — это проблема отсталости технологии. Печалит, что даже в совремнных версиях дельфи я не могу нормальный FreeAndNil написать. Максимум, что можно — TObjectHelper.FreeAndNil [ TMyObject ] (MyObject) // вместо [] — угловые скобки читать
-2
Гораздо проще просто запретить использование freeAndNil.
А проблема висячих ссылок решается использованием:
— объектов передаваемых по значению (record и old-style object) вместо class,
— динамических массивов вместо контейнеров хранящих ссылки на class,
— интерфейсов.
А проблема висячих ссылок решается использованием:
— объектов передаваемых по значению (record и old-style object) вместо class,
— динамических массивов вместо контейнеров хранящих ссылки на class,
— интерфейсов.
-5
НЛО прилетело и опубликовало эту надпись здесь
не знаю почему вас заминусовали, может потому, что вы использование интерфейсов не поставили на первой место? ;)
а про остальное не сказали, что это «устаревшие технологии» и при божеской архитектуре все эти извраты ненужны? ;)
а про FreeAndNil могу с вами согласится ;) прекрасно обхожусь без него :)
а про остальное не сказали, что это «устаревшие технологии» и при божеской архитектуре все эти извраты ненужны? ;)
а про FreeAndNil могу с вами согласится ;) прекрасно обхожусь без него :)
0
Да, непонятно за что минусы :)
Я постоянно использую интерфейсы, и в курсе про SIL sourceforge.net/projects/sil/
но для многих DTO интерфейсы — уже больше чем необходимо хотя бы потому что кода больше в разы.
Я постоянно использую интерфейсы, и в курсе про SIL sourceforge.net/projects/sil/
но для многих DTO интерфейсы — уже больше чем необходимо хотя бы потому что кода больше в разы.
0
(wrong place)
-1
как человек, пишущий 15 лет на Delphi, не смог пройти мимо ;)
поиск решения это похвально, но сама по себе проблема надумана ;)
про FastMM вам уже сказали — он бешено рулит, если мне не изменяет память, с 2004 года… а в 2007-й Delphi так и вообще встроен(вы в курсе? ;) и включается 1-й строкой.
если начать говорить про архитектуру, то можно вспомнить, что разделение ответсвенности — это хорошо ;) и тогда возникает вопрос — а с чего это вы так ресурсами жонглируете что они у вас освоброждаются где попало?
еще можно нетипизированными указателями бросатся из одного конца приложения в другой(попадались такие извращенцы, хотя Delphi сопротивляется этому до последнего), тогда никакой FreeAndNil не поможет…
в общем, использование FreeAndNil в надежде что это избавит от ошибок, вместо корректной архитектуры с разграничением доступа — уже костыль. а вы его «покрасили серебрянкой» ;)
P.S. использую исключительно Free либо интерфесы — полет нормальный :)
поиск решения это похвально, но сама по себе проблема надумана ;)
про FastMM вам уже сказали — он бешено рулит, если мне не изменяет память, с 2004 года… а в 2007-й Delphi так и вообще встроен(вы в курсе? ;) и включается 1-й строкой.
если начать говорить про архитектуру, то можно вспомнить, что разделение ответсвенности — это хорошо ;) и тогда возникает вопрос — а с чего это вы так ресурсами жонглируете что они у вас освоброждаются где попало?
еще можно нетипизированными указателями бросатся из одного конца приложения в другой(попадались такие извращенцы, хотя Delphi сопротивляется этому до последнего), тогда никакой FreeAndNil не поможет…
в общем, использование FreeAndNil в надежде что это избавит от ошибок, вместо корректной архитектуры с разграничением доступа — уже костыль. а вы его «покрасили серебрянкой» ;)
P.S. использую исключительно Free либо интерфесы — полет нормальный :)
+1
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Аналог FreeAndNil с проверкой типа