1 | ||||||
Поменять make и release так, чтобы организовать правильное уничтожение объектов и освобождение памяти21.08.2016, 15:40. Показов 816. Ответов 15
Метки нет Все метки)
(
Имеем код:
Если ввод удался, то создается соответствующий объект (это может быть расширено в дальнейшем). В данном коде деструкторы не виртуальные, поэтому в release будет вызван лишь деструктор базового класса. Задача: Поменять make и release таким образом, чтобы организовать правильное уничтожение объектов и освобождение памяти. Учтите, что сами классы, а также функцию main менять нельзя. Также в будущем планируется добавлять наследников Base, поэтому решение должно быть расширяемым без особого труда.
0
|
21.08.2016, 15:40 | |
Ответы с готовыми решениями:
15
Правильное освобождение памяти
|
Падаван С++
![]() 447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
||||||
21.08.2016, 15:50 | 2 | |||||
HelicopterK52,
Кликните здесь для просмотра всего текста
0
|
Падаван С++
![]() 447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
|
21.08.2016, 15:52 | 4 |
HelicopterK52, забыл
![]()
0
|
21.08.2016, 15:59 [ТС] | 5 |
Кликните здесь для просмотра всего текста
obivan, только у Вас функция release совсем бесполезная. В параметрах - копия указателя, так что reset ни на что не повлияет. Уничтожение будет происходить в конце каждой итерации цикла в main. В данном случае это не страшно, но всё же.
![]()
1
|
21.08.2016, 16:01 | 6 |
Не по теме: HelicopterK52, а, точно, спасибо что заметили :)
0
|
![]() 245 / 139 / 53
Регистрация: 23.11.2015
Сообщений: 394
|
||||||
21.08.2016, 19:15 | 7 | |||||
а я подумал про что-то такое и дооолго костылил
Кликните здесь для просмотра всего текста
0
|
![]() 1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
22.08.2016, 17:07 | 8 |
obivan, HelicopterK52, Вы сами-то этот код запускали? Как умный указатель сделает из невиртуального деструктора виртуальный?
0
|
Падаван С++
![]() 447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
|
|
22.08.2016, 17:20 | 9 |
avgoor, http://stackoverflow.com/quest... -ptr-magic
Добавлено через 13 секунд запустите то код и проверьте ![]()
0
|
22.08.2016, 17:22 [ТС] | 10 |
А Вы?
http://rextester.com/YCL74424 У shared_ptr под капотом некий "хелпер", который знает какой объект внутри, так что всё нормально будет. То есть shared_ptr не сделает деструктор виртуальным, он лишь произведет правильное уничтожение объекта. Можете поизучать соответствующую литературу, документацию.
0
|
22.08.2016, 17:28 | 11 |
HelicopterK52, не осилил, лень читать такую тягомотину, старайся сделать задачку максимально сжатой по коду (10 строк максимум) и вообще по объему.
И тогда прочтение мною твоего поста обеспечено.
0
|
22.08.2016, 17:31 [ТС] | 12 |
Не осилил - не лезь.
Да мне как-то всё равно, прочитаешь ты его или нет. Надеюсь, я понятно выразился - ты не пуп земли. Так что учти это, когда следующий пост будешь писать. Как говорится, не указывайте мне что делать и...
0
|
22.08.2016, 17:34 | 13 |
Не по теме: HelicopterK52, воу-воу, палехче, бро) Давай только без резкостей. Это сейчас нужно меньше всего :)
0
|
22.08.2016, 17:34 [ТС] | 14 |
0
|
![]() 1550 / 875 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
22.08.2016, 17:46 | 15 |
HelicopterK52, obivan, Тьфу, блин, ступил. Обычно unique_ptr возвращается, а я сейчас "выхожу из состояния глубокой отладки", вот и заклинило
![]()
0
|
22.08.2016, 17:49 [ТС] | 16 |
avgoor, да, с unique_ptr такое не прокатит
![]()
0
|
22.08.2016, 17:49 | |
Помогаю со студенческими работами здесь
16
Освобождение памяти от объектов Освобождение памяти динамически созданных объектов
Освобождение памяти из под Объектов в статическом массиве указателей Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Protobuf в Go и новый Opaque API
golander 15.03.2025
Распределенные системы опираются на эффективные протоколы обмена данными — о чем вы, скорее всего, прекрасно знаете, если работаете с микросервисной архитектурой. Protocol Buffers (Protobuf) от. . .
|
Преобразование строк в C++: std::from_chars от C++17 до C++26
NullReferenced 15.03.2025
Конвертация строк в числа — задача, с которой сталкивается практически каждый C++ разработчик. Несмотря на кажущуюся простоту, эта операция таит множество подводных камней и неочевидных последствий. . .
|
Управление памятью в Java и новые сборщики мусора
Javaican 15.03.2025
Эффективное управление памятью всегда было ахиллесовой пятой высоконагруженных Java-приложений. При разработке на Java мы обычно полагаемся на автоматическое управление памятью через сборщики мусора. . .
|
Angular или Svelte - что выбрать?
Reangularity 15.03.2025
Во фронтенд-разработке Angular и Svelte представляют собой два совершенно разных подхода к решению схожих задач. Один — полноценный, мощный монолит с корпоративной поддержкой, другой — компактный,. . .
|
Spring Cloud микросервисы: обнаружение и отслеживание
Javaican 15.03.2025
В разработке корпоративных приложений всё больше команд обращают внимание на микросервисную архитектуру. Но с этой архитектурой приходят и специфичные трудности: как сервисам находить друг друга в. . .
|
Запуск контейнера Docker в облаке
Mr. Docker 15.03.2025
Что такое Docker-контейнер? Если коротко — это легковесный, автономный пакет, содержащий всё необходимое для запуска приложения: код, зависимости, библиотеки и конфигурации. Когда мы говорим о. . .
|
Осваиваем Kubernetes: Подробная шпаргалка
Mr. Docker 15.03.2025
Kubernetes — это открытая платформа для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Он был создан для решения проблем, с которыми сталкиваются. . .
|
Лучшие PHP REST API фреймворки
Jason-Webb 15.03.2025
Современные PHP REST API фреймворки предлагают большой набор функциональности: от автоматической валидации данных и управления маршрутизацией до генерации документации и интеграции с различными. . .
|
Многопоточность в Java с Project Loom: виртуальные или обычные потоки
Javaican 15.03.2025
Многопоточность всегда была одноим из основных элементов в разработке современного программного обеспечения. Она позволяет приложениям обрабатывать несколько задач одновременно, что критично для. . .
|
Что нового в Swift 6 и особенности миграции
mobDevWorks 15.03.2025
Swift 6 — это новый крупный релиз языка программирования от Apple, анонсированный на WWDC 2024. Если вы следили за эволюцией Swift, то наверняка заметили, что многие значимые возможности, которые. . .
|