|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
12.11.2010, 16:26 | #11 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Пепел Феникса Советую сборщик мусора сделать как в Objective C. На основе подсчета ссылок, чем то похожее на COM в Windows.
1. objectOfClass: alloc - выделить память под класс и установить счетчик ссылок в 1 2. objectOfClass: retain - увеличить счетчик на 1 3. objectOfClass: release - уменьшить счетчик на 1, если счетчик равен 0 - освободить место объекта класса 4. objectOfClass: autorelease - если объект создается только для использования в одной функции (или в логическом блоке begin end; { }), то при вызове alloc после добавляется доп. поле autorelease которое говорит о том, что по сути после окончания блока/функции будет автоматически вызван метод release, что по сути освободит объект Это очень удобно, т.к. каждый модуль/класс может захватить объект и увеличить ссылку в нем, и данный модуль будет уверен что объект существует пока он сам его не освободит. Это удобно для глобальных объектов к примеру. Что еще понравилось в Objective C, так это то, что методы = сообщения. Логика в том, что можно к примеру сделать так null->release(); это по сути абсурд, т.к. объект уже не существует, а мы вызываем метод у объекта. Т.к. метод = сообщение, то мы попросту пошлем сообщение null'у чтобы тот вызвал release, но т.к. это null сообщение просто про игнорируется, и не будет ошибки. Конечно это мое мнение что, данный подход очень удобен и дает сразу и сборщик мусора и более менее контроль над памятью. p.s. хм, может и мне что то подобное навязать как гос экзамен в универе, если можно конечно такое провернуть. |
12.11.2010, 22:04 | #12 | ||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Цитата:
Цитата:
|
||
12.11.2010, 22:11 | #13 | |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Цитата:
На счет сообщений имелось ввиду, что к примеру Код:
Код:
По крайней мере мне это важно, т.к. каждый класс, особенной описывающий форму/вьюшку/контрол/темплейт всегда имеет кучу объектов которые создаются в конструкторе и уничтожаются в деструкторе. Имел дело с object pascal, c++, c# и objective c. Больше всего понравился по языку Objective C вот и предлагаю явные для меня плюсы. |
|
12.11.2010, 22:47 | #14 | ||
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
Цитата:
Цитата:
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс Последний раз редактировалось ROD; 12.11.2010 в 22:49. |
||
12.11.2010, 22:48 | #15 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Кнопка хранит ссылку на форму, на которой она находится. В то же время форма хранит в себе список расположенных на ней кнопок. Итог: ни форма, ни кнопки никогда не будут удалены из памяти (форма нужна кнопкам, кнопки нужны форме). На деле такая зависимость может проявиться в иерархии из N классов и не так легко будет просматриваться.
|
12.11.2010, 23:51 | #16 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
pu4koff, такое должно удалятся вообще чуть иначе.
то есть Код:
Цитата:
ну а так согласен, метод хороший Цитата:
кстати, а в С++: Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 12.11.2010 в 23:56. |
||
13.11.2010, 06:30 | #18 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Для подхода с подсчетом ссылок этот случай достаточно проблематичен. Поэтому я про него и упомянул.
Ну как проблема... форму уже удалили за ненадобностью, а кнопку - нет. В итоге кнопка ссылается непонятно на что и существует непонятно зачем (зачем нам кнопка без формы?). new есть. delete - нет. Значит утечка будет. |
13.11.2010, 08:25 | #19 | |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Цитата:
На счет списка, одно дело просто хранить ссылку(указатель, адрес) на кнопку в списке каком либо, другое дело вызывать retain что увеличит счетчик объекта. Не путайте. Ну да ладно, видимо я уже опоздал с предложением автору. Автор, вы со своей темой меня поджигаете уже сам хочу попробовать подобное сделать. А вот вопрос, это язык компилируемый я так понимаю? Вы в итоге напишите интерпретатор который будет переводить ваш код(язык) в asm, а потом используя какой либо asm компилятор компилировать уже в бинарный код? Или идея в чем то другом? |
|
13.11.2010, 09:09 | #20 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,085
|
Цитата:
Кнопка нужна форме, следовательно счетчик + 1. Форма нужна кнопке - следовательно счетчик + 1. Получаем, что форма не может удалиться, т.к. её счетчик равен 1 и та же ситуация с кнопкой. Если я буду хранить список кнопок формы без увеличения счетчиков, то они соберутся сборщиком и волшебным образом пропадут с экрана на глазах у удивленного пользователя. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
можно ли подобный текст перевести на человеческий язык? | alexxx777 | Помощь студентам | 0 | 24.05.2010 19:56 |
Как создать вид подобный SolidWorks. | KemanSR | Общие вопросы C/C++ | 6 | 04.05.2010 21:30 |
Добавить модуль в phpnuke-подобный движок | Able2Know | Фриланс | 3 | 23.04.2010 16:29 |
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? | An_ton | SQL, базы данных | 5 | 16.01.2009 17:55 |