
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.218] |
![]() |
|
Страницы: (245) « Первая ... 220 221 [222] 223 224 ... 244 245 ( Перейти к последнему сообщению ) |
Сообщ.
#3316
,
|
|
|
Цитата --Ins-- @ Я для нотификации об уничтожении объекта использую нотификацию в виде вызовов методов заинтересованных объектов Какие красивые подпорки для соблюдения инвариантов в условиях дикой природы распоясавшегося полиморфизма ![]() Цитата Flex Ferrum @ И именно наличие такого функционала приводит к тому, что разработчиком приходится придумывать мозговыносящие инварианты, следить за их соблюдением, дёргать FreeAndNil, надеяться на то, что разработчики используемых компонент - в достаточной степени пряморукие. |
Сообщ.
#3317
,
|
|
|
Ты меня давай не путай, у вас в делфях ссылочная семантика, соответственно в примере корвина - хранят ссылки на объекты, а не значения как в С++. На Nil то ты их сравниваешь, интересно как, если это полноценные объекты? |
Сообщ.
#3318
,
|
|
|
Ты разницу между "не создан" и "уничтожен" понимаешь? |
![]() |
Сообщ.
#3319
,
|
|
Цитата --Ins-- @ я предпочитаю чтобы при уничтожении объекта все заинтересованные получали об этом уведомления и сами предпринимали нужные действия, которые обнулением ссылки могут не ограничиваться По-моему это накладней и привносит больше возможностей отстрелить кому-нибудь ногу или еще чего. |
Сообщ.
#3320
,
|
|
|
Цитата Wound @ Ты меня давай не путай, у вас в делфях ссылочная семантика, соответственно в примере корвина - хранят ссылки на объекты, а не значения как в С++. На Nil то ты их сравниваешь, интересно как, если это полноценные объекты? Ну да, а ссылка - это число, значение адреса ![]() ![]() ![]() Добавлено Цитата korvin @ По-моему это накладней и привносит больше возможностей отстрелить кому-нибудь ногу или еще чего. Нет, просто все прочее - это от непонимании разницы между объектом и ссылкой на него. Для того, для кого ссылка на объект - это эквивалент объекта - да, так проще и понятнее ![]() ![]() |
Сообщ.
#3321
,
|
|
|
Цитата --Ins-- @ Ну да, а ссылка - это число, значение адреса ![]() ![]() ![]() Подожди. Я запутался. Добавлено Все я понял. Там же FreeAndNill зануляет только переданую переменную. Ну блин у вас и трешняк... |
Сообщ.
#3322
,
|
|
|
Цитата Wound @ Ну блин у вас и трешняк... А что, должно быть как-то иначе? Ссылка должна волшебным образом обнуляться? Это следствие отсутствия автоматической сборки мусора для объектов, в этих условиях иначе сделать нельзя никак. Ну либо как в плюсах - нессылочная семантика, но нафиг такое |
Сообщ.
#3324
,
|
|
|
Цитата --Ins-- @ У нас вроде бы нет кладбищ объектов с памятниками "TObject'у от благодарных потомков", поэтому чем отличается не созданный от уничтоженного - не понимаю. И то и другое - биомасса в реакторе. Ты разницу между "не создан" и "уничтожен" понимаешь? |
Сообщ.
#3325
,
|
|
|
Цитата OpenGL @ Цитата --Ins-- @ Если в дельфи при вызове конструктора происходит исключение, то вызывается деструктор, чтобы освободить все то, что успело создаться в конструкторе до исключения - сборщика мусора то нет. Так вот, если на момент исключения в конструкторе что-то еще не создалось, то только в этом случае нужна проверка на nil. После плюсов это кажется дикостью ![]() Это и без плюсов дикость ![]() |
Сообщ.
#3326
,
|
|
|
Цитата --Ins-- @ А что, должно быть как-то иначе? Ссылка должна волшебным образом обнуляться? Это следствие отсутствия автоматической сборки мусора для объектов, в этих условиях иначе сделать нельзя никак. Ну либо как в плюсах - нессылочная семантика, но нафиг такое Кстати а когда объект будет удален? Вот вызвал я FreeAndNil. Объект то уже удален? Я имею ввиду не обнулен, а именно удален физически, память очищается после FreeAndNil ? |
Сообщ.
#3327
,
|
|
|
Цитата Wound @ Я имею ввиду не обнулен, а именно удален физически, память очищается после FreeAndNil ? Да, конечно |
Сообщ.
#3328
,
|
|
|
Цитата --Ins-- @ Да, конечно тогда почему в примере korvin небыло AV? т.е. мы можем запросто один объект присвоить другому, и потом первый удалить с помощью FreeAndNil, а тот которому мы присвоили будет жить своей жизнью, да еще не будет занулен? И что это получается какая то кака? |
Сообщ.
#3329
,
|
|
|
Цитата Wound @ Ну блин у вас и трешняк... Это не удалось им доказать за несколько серий многостраничных холиваров с портянками. Добавлено Цитата Wound @ И что это получается какая то кака? Классическая висячая ссылка получается. |
Сообщ.
#3330
,
|
|
|
Цитата --Ins-- @ Кстати а когда объект будет удален? Методы, помеченные как destructor работают волшебным образом. Они могут быть вызваны как методы, и как деструкторы - как методы, и как деструкторы - зависит от того, как этот вызов оформлен. Например, пусть у нас есть метод destructor Destroy, тело которого пустое. Если я напишу Obj.Destroy (или Free, который вызывает Destroy внутри себя) - это деструктор, он вызовет не только тело Destroy, но и освободит память (TObject.FreeInstance). Если же я напишу inherited Destroy в перекрытом деструкторе потомка этого класса - это вызов Destroy как обычного метода, т.е. просто будет выполнено пустое тело. А память будет освобождена уже после отработки даже моего тела Destroy |