|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.11.2010, 09:11 | #21 | |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
Цитата:
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
|
13.11.2010, 09:24 | #22 | ||||
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Цитата:
Цитата:
2. Цитата:
3. Цитата:
4. Во время удаления формы, можно просто пробежатся по списку контролов и у каждого вызвать release, т.е. уменьшить counter на 1, т.к. по сути все что было добавлено во время инициализации формы и после, все объекты, они были добавлены через alloc либо через retain, что значит каждый был добавлен с +1 к counter'у. Значит логично все в списке -1 от counter'a. Соответственно, если объект более никуда не ссылается, counter = 0 и объект будет уничтожен, это к примеру наша кнопка, которая ничего не делает на форме, она была создана во время инициализации формы (alloc => counter = 1) и при удалении формы release из списка => counter = 0 => free. Надеюсь ясно вы просто не много не понимаете идею, ибо она очень отличается от идей языков delphi/c++/c# и многие другие. UPD: Код:
Последний раз редактировалось BOBAH13; 13.11.2010 в 09:36. |
||||
13.11.2010, 09:29 | #23 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
BOBAH13, мозг у меня совсем не работает, поэтому так я до конца идею и не понял. Ну да ладно. Может когда-нибудь до Objective C руки дойдут, там со сборщиком и разберусь. До меня теория без практики туго доходит
|
13.11.2010, 12:25 | #24 | |||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
да сначало в асм потом в bin, хочу написать компиль асма к нему, чтоб он сам мог это все сделать. ну и линкер(но это проще чем компиль асма) Цитата:
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|||
13.11.2010, 12:42 | #25 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Нет. Утечка будет из-за создаваемой в операторе переменной t. Память под неё выделили, вернули указатель из неё, но в b скопируется не ссылка, а сам объект t через конструктор копии. Так что там возвращать нужно не ссылку, а значение, т.е. объект.
|
13.11.2010, 13:16 | #26 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
а можно примерчик небольшой?
(конечно вообще там правильно += применить, но в данный момент не суть) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
13.11.2010, 13:54 | #27 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Как-то так:
Код:
|
13.11.2010, 16:14 | #28 | ||
Great Code Monkey
Форумчанин
Регистрация: 09.08.2007
Сообщений: 533
|
Цитата:
Итак, внутри объекта 1 указатель на объект 2. Внутри объекта 2 указатель на объект 1. Нужно очень часто: как минимум при управлении кэшируемыми объектами и при реализации паттернов Composite/Observer/MVC. Для примера рассмотрим Observer. Пусть у нас есть наблюдатели (скажем, куча таблиц и диаграмм) и субъект (данные). Внутри каждого наблюдателя должен быть указатель на субъект, внутри субъекта - список указателей на наблюдателей. Получаем циклические ссылки (или по документации Mac OS X Reference Library - Retain Cycles) - а это недопустимо. В той же документации (секция Weak References to Objects) предлагается следующее решение проблемы - не делать retain на наблюдателей, а просто внутри субъекта хранить слабые указатели на них. Недостаток такого решения очевиден (правда есть и другое решение, а именно использование __weak, но оно уже полностью связано с GC) - если клиентский код удалил какого-нибудь наблюдателя, но забыл об этом оповестить субъект, то после следующего обновления данных субъект, пытаясь оповестить об изменении данных всех наблюдателей, наткнется на удаленного наблюдателя и программа вылетит. В Objective C за этим надо следить ручками, а в C++ эту проблему прекрасно решает boost::weak_ptr. Цитата:
|
||
13.11.2010, 18:18 | #29 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
(глупые вопросы, но хочу быть увереннее) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
13.11.2010, 22:43 | #30 | |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Цитата:
Кстати, раз уж затронули эту тему... минус перегрузки операторов, используемой в плюсах, в дублировании кода. Программисту логично, что b = b + 1 и b += 1 это одно и то же, а вот для компилятора это совершенно разные вещи. Можно конечно выражать += через оператор +, но тогда код будет далеко не самым оптимальным. Есть повод подумать над своей гениальной перегрузкой, чтобы и без дублирования и не зависеть от порядка переменных (в С++ а + b не всегда тождественно b + a, если a и b разных типов, т.к. будут использоваться разные варианты перегрузки +). За это я и не люблю С++. Язык позволяет многое, но по сути это выливается в кучу граблей и приходится самого себя ограничивать, дабы лоб не разбить. Так что думайте над своим творением более тщательно, чтобы потом не пришлось баги фичами называть |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
можно ли подобный текст перевести на человеческий язык? | 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 |