|
2 / 2 / 1
Регистрация: 21.11.2011
Сообщений: 183
|
|||||||||||||||||
Перегрузка new и delete03.08.2012, 15:53. Показов 5910. Ответов 31
Метки нет (Все метки)
Помогите пожалуйста разобраться! Непонимаю примера из Т.А. Павловская "C/C++ Программирование на языке высокого уровня" для большей ясности цитирую
2. Эту дополнительную информационную ячейку возвращает функция operator new? т.е. когда я выделяю в программе память:
3. В данном примере экономия по памяти заключается в том, что все лишь одна такая ячейка будет выделена взамен 1024-ем? и поэтому в строке 30 в комментариях пишется //Все ячейки свободны, кроме первой (она будет занята). Т.е. будет занята информацией о количестве выделенной памяти? 4. Что будет когда мы впервый раз выделим область памяти
5. И как эта область выделенная (BLOCK_SIZE*sizeof(pObj)) вообще освободится...ведь в переопределении operator delete нет никакого высвобождения памяти, а лишь перенаправление указателей в случае соответствия размеров???????? Добавлено через 6 минут Расскажите поподробней как это все происходит, а то ничего не понятно...
0
|
|||||||||||||||||
| 03.08.2012, 15:53 | |
|
Ответы с готовыми решениями:
31
Перегрузка оператора new и delete Перегрузка операторов new и delete Перегрузка глобального оператора delete с параметрами |
|
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,564
|
|||||||
| 03.08.2012, 16:37 | |||||||
|
Не по порядку отвечу. Всё нижеследующее на истину не претендует.
1) Довольно часто на платформах, отличных от Винды, Линукса и т.д., требуется свой распределитель памяти, стандартный может не выполнять накладываемых на него требований. 2) Так же для некоторых классов может потребоваться выделение памяти не из кучи, а из пула или ещё как-нибудь, а хочется использовать единообразие при создании объектов. В этом случае тоже можно перегружать операторы new/delete. 3) Ну и самый простой случай - когда нужно запретить создание объектов по new/delete. Кстати, подобный пример описан в книжке Александреску "Современное проектирование на С++". Книжка там совсем не об этом, но такой параграф там присутствует. Добавлено через 3 минуты Добавлено через 6 минут размера никакой доп.ячейки не создаётся. Потому и в операции delete нет освобождения памяти. Память выделена один раз и используется для новых объектов. Когда удалятся все объекты, указатель станет равным значению самой первой области памяти. Добавлено через 10 минут
0
|
|||||||
|
2 / 2 / 1
Регистрация: 21.11.2011
Сообщений: 183
|
||||||||||||
| 03.08.2012, 16:58 [ТС] | ||||||||||||
|
что значит
Добавлено через 10 минут
Добавлено через 1 минуту или вы имеете ввиду в теле переопределяемой функции вызов ::operator new(BLOCK_SIZE * sizeof(pObj));?
0
|
||||||||||||
|
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,564
|
|||||||||||||||||||||||||
| 03.08.2012, 17:08 | |||||||||||||||||||||||||
Добавлено через 3 минуты
Тут мы вызываем уже перегруженный new:
1
|
|||||||||||||||||||||||||
|
2 / 2 / 1
Регистрация: 21.11.2011
Сообщений: 183
|
|||||||||
| 03.08.2012, 17:24 [ТС] | |||||||||
|
т.е. пулом так же будет к примеру массив char'ов?
Хотелось бы более уверенный ответ про освобождение памяти) Добавлено через 3 минуты Огромное спасибо, за помощь)
0
|
|||||||||
|
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,564
|
||
| 03.08.2012, 17:28 | ||
|
0
|
||
|
2 / 2 / 1
Регистрация: 21.11.2011
Сообщений: 183
|
||
| 03.08.2012, 17:44 [ТС] | ||
|
Нет, больше ничего не сказанно, что очень поразило, ибо во всех ост. разделах разжевывают все, а тут как-то совсем никак...
0
|
||
|
|
|
| 03.08.2012, 19:17 | |
|
Пример кода от Павловской - бред какой-то. Даже не знаю, как по другому назвать. Быдлокод хотя бы имеет под собой какую-то логику, но это даже быдлокодом не назовешь.
Не по теме: К сожалению прямо сейчас не могу аргументировать свои слова. жена из-за компа гонит, сопротивлятся опасно:-[
0
|
|
|
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
|
|
| 03.08.2012, 19:24 | |
|
Alberto_Timakov, лучше Мэйерса С. возьмите, почитайте. В его книге перегрузке new/delete, уделен раздел, с нормальными примерами, того когда целесообразно перегружать new/delete.
0
|
|
|
2 / 2 / 1
Регистрация: 21.11.2011
Сообщений: 183
|
||||
| 03.08.2012, 22:50 [ТС] | ||||
|
Kastaneda,
И если есть представление того, как в данном примере освобождается память, я буду очень благодарен за ответ, мне интересно, а понять никак не могу... Добавлено через 20 секунд Добавлено через 2 минуты Не по теме: :jokingly: Добавлено через 1 час 2 минуты
0
|
||||
|
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,564
|
||
| 03.08.2012, 23:14 | ||
|
0
|
||
|
2 / 2 / 1
Регистрация: 21.11.2011
Сообщений: 183
|
||
| 03.08.2012, 23:22 [ТС] | ||
|
Цитата из Скота Мейерса "Эффективное использование C++" к вышенаписанному примеру, а именно к operator delete
Добавлено через 2 минуты Ну, не понимаю, почему нет утечки памяти! Ведь, если мы запустим первый раз программу, то выделится одна область, после закроем программу, память ведь не освободится! откроем снова программу и память выделится другая! и т.д.! или...
0
|
||
|
2393 / 1922 / 763
Регистрация: 27.07.2012
Сообщений: 5,564
|
|||
| 03.08.2012, 23:32 | |||
Говорит ли об этом Мейерс?Добавлено через 4 минуты Добавлено через 5 минут Тут смысл в том, что эта область останется зарезервирована под выделение памяти только для объектов этого типа на всё время выполнения программы.
0
|
|||
|
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
|
||
| 03.08.2012, 23:34 | ||
|
0
|
||
|
2 / 2 / 1
Регистрация: 21.11.2011
Сообщений: 183
|
||
| 04.08.2012, 00:28 [ТС] | ||
|
0
|
||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 04.08.2012, 00:56 | |
|
Всё гораздо проще: программа завершает работу — её память становится ничейной. ОС сообщает менеджеру виртуальной памяти, что такой-то процесс благополучно сдох и те куски памяти, что он выпросил для себя, можно спокойно раздавать другим процессам. Понятие «утечки памяти» имеет смысл только тогда, когда программа ещё работает.
0
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||||||
| 04.08.2012, 01:06 | ||||||
|
покажу на примере что такое утечка памяти
при втором и последующем проходе в var заносится новые значения указателей а старые затираются в результате удаляется только последний выделенный блок а 9 болтаются и до них никак нельзя достучатся Но после выхода из программы(как уже было сказано)память очистится, об этом позаботится ОС и если запустить программу 10 раз то в памяти будет болтаться не 90 а всего 9 блоков в твоем примере указатель не затирается значит всегда есть возможность освободить память- это не утечка
0
|
||||||
|
2 / 2 / 1
Регистрация: 21.11.2011
Сообщений: 183
|
|
| 04.08.2012, 02:46 [ТС] | |
|
0
|
|
|
3 / 2 / 2
Регистрация: 14.12.2009
Сообщений: 149
|
|
| 09.12.2018, 22:29 | |
|
У меня насчет этого примера другой вопрос.
В чем смысл этого примера? Ведь в нем член union это указатель либо на свободную ячейку, либо на обьект Obj, но как указатель на объект Obj в примере он никак не инициализируется. Нужно же еще укзателю p что-то присваивать. Либо new Obj, тогда выгода теряется, все равно каждый раз стандартный new вызывать. Либо адрес существующего статического объекта, тогда вообще легче объявить массив таких объетов и все.
0
|
|
|
|
|||
| 10.12.2018, 07:55 | |||
![]() Не по теме: Самый опасный уровень развития - это когда ты уже что-то знаешь, но еще не понимаешь как это мало и тебе кажется, что ты знаешь почти все. На этом этапе можно много бреда написать. Еще раз на код глянул, профита от union что-то не вижу, вроде p даже не используется.
1
|
|||
| 10.12.2018, 07:55 | |
|
Помогаю со студенческими работами здесь
20
Используя delete по указателю, возвращенному new [] или delete [] указателем, возвращаемым new
Чем отличается delete[] от delete? Delete или delete [] delete[] *pointer vs. delete pointer и утечка памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|