Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 3

Время жизни объекта класса

30.05.2018, 21:03. Показов 4132. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Вот возник у меня вопросс с ООП и разработкой больших программ.
Большие ООП программы могут иметь много классов. Например функция main имеет большое количество созданых объектов, эти объекты и меют время жизни как у функции main. Такое большое количество объектов жрёт память, как поступают разработчикт чтобы сократить расход ресурсов? Мне пришло в голову только динамическое содание объектов. Создал динамический объект класса, онт выполнил своё назначение, уничтожил вызвав delete. Вот только тогда прога имеет большое количество new-delete, а это на мой взгляд плохо. Что делать с объектом если в нем нет нужды, он выполнил свои действия, оставлять висеть в памяти или уничтожать, а если нужен создать новый?
Спасибо!!)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.05.2018, 21:03
Ответы с готовыми решениями:

"Время жизни переменной/объекта класса"
Здравствуйте, как правильней делать: есть класс A, в его конструкторе я объявляю переменную типа int и объекта класса. class B { ...

Время жизни объекта
Доброго времени суток, объясните пожалуйста, как можно продлить время жизни объекта, который создан локально. В данном случае - есть...

Время жизни временного объекта
можно ли передать временный объект в функцию по ссылке? void f1(int & ); ..... int main() { f1(int());

10
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,750
30.05.2018, 21:56
Если уже дошли до ООП и классы, наверное вы про конструкторы и деструкторы тоже читали?
ну большие программы помоему чистельщиками снабжают
0
0 / 0 / 0
Регистрация: 15.11.2016
Сообщений: 3
30.05.2018, 22:09  [ТС]
Да, читал, просто вызов деструктора при выходе из функции, а явный вызов плохой стиль. А можете подробней про чистильщики рассказать? Это как в java сборщик мусора?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
30.05.2018, 22:24
Alex255,
Цитата Сообщение от Alex255 Посмотреть сообщение
функция main имеет большое количество созданых объектов, эти объекты и меют время жизни как у функции main.
Объем выделенной памяти не может превысить размер стека. Объекты, которые не хочется размещать и удалять явно, можно хранить в контейнерах. Кроме того есть смарт-пойнтеры.
0
518 / 410 / 188
Регистрация: 08.04.2013
Сообщений: 1,750
30.05.2018, 23:26
Цитата Сообщение от Alex255 Посмотреть сообщение
А можете подробней про чистильщики рассказать?
Искусство программирования на с++ Герберт Шилдт 2005 г есть подробное описание с кодом сборщика мусора
0
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
31.05.2018, 00:11
Я полагаю, вариант с созданием в Main только необходимых файлов не интересует?
0
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
31.05.2018, 00:48
Цитата Сообщение от IGPIGP Посмотреть сообщение
Объем выделенной памяти не может превысить размер стека
Тогда уж кучи. Объекту ядра процесс выделяется куча, а потокам стеки. Но динамическая память выделяется не в стеке, а в куче.
Цитата Сообщение от Alex255 Посмотреть сообщение
Такое большое количество объектов жрёт память, как поступают разработчикт чтобы сократить расход ресурсов?
Память уже была выделена, пусть жрут, если надо

Цитата Сообщение от Alex255 Посмотреть сообщение
Мне пришло в голову только динамическое содание объектов. Создал динамический объект класса, онт выполнил своё назначение, уничтожил вызвав delete.
Память была выделена в куче, которая уже была выделена процессу, так что, всё нормально.
Цитата Сообщение от Alex255 Посмотреть сообщение
Вот только тогда прога имеет большое количество new-delete, а это на мой взгляд плохо. Что делать с объектом если в нем нет нужды, он выполнил свои действия, оставлять висеть в памяти или уничтожать, а если нужен создать новый?
Конечно уничтожать вызовом delete, если он динамически создан, тогда блок памяти в куче освободится и перейдет в состояние "Свободен", что позволит выделить его другому "объекту".

Цитата Сообщение от marat_miaki Посмотреть сообщение
ну большие программы помоему чистельщиками снабжают
"Чистильщики" в Шарпе, а тут следи сам, пожалуйста.
0
298 / 107 / 31
Регистрация: 12.03.2012
Сообщений: 449
31.05.2018, 01:17
Цитата Сообщение от Alex255 Посмотреть сообщение
Вот только тогда прога имеет большое количество new-delete, а это на мой взгляд плохо.
Очень редки случаи, когда это критично. Но если проект действительно большой, можно самому организовать менеджмент памяти, например через пулы и куски. Почитайте про 'placement new' и memory pools
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.05.2018, 07:43
Цитата Сообщение от SuperKir Посмотреть сообщение
Тогда уж кучи.
Это Вы зачем? Я говорил ТС в контексте заданного вопроса. Хотите посоревновноваться в знании синонимов слов память, куча, стек, стейк, куча стейков?
Написал:
Цитата Сообщение от IGPIGP Посмотреть сообщение
Объем выделенной памяти не может превысить размер стека.
и это о функции main в контексте вопроса. Где Вы там видели кучу?
0
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
31.05.2018, 08:19
IGPIGP, Не сердитесь
ТС приводил пример с динамическим выделением памяти, посему я и сделал поправку
Разумеется, соревноваться с Вами мне не по силам, я сразу признаю свою поражение

Цитата Сообщение от IGPIGP Посмотреть сообщение
и это о функции main в контексте вопроса. Где Вы там видели кучу?
Вот тут:
Цитата Сообщение от Alex255 Посмотреть сообщение
Мне пришло в голову только динамическое создание объектов.
Но, в контексте Вашего комментария Вы несомненно правы (если, конечно, речь идет о параметрах функций и локальных переменных).
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
31.05.2018, 08:30
Цитата Сообщение от SuperKir Посмотреть сообщение
Разумеется, соревноваться с Вами мне не по силам, я сразу признаю свою поражение
Дело не в соревновании. Когда мы пишем о таких вещах как С++ невозможно написать полно и непротиворечиво учитывая требование краткости. Остаётся лишь желание или нежелание найти рациональное зерно.
У ТС вопрос, который всегда возникает у начинающих и тут нужно читать. Я затронул темы которые имеет смысл прочесть. Писать много, - времени не было. Однако тема с ясным названием привлекла и захотелось ответить. Когда человек задаёт ясный вопрос, это хороший признак. А материал можно поискать и в книжках и внизу страницы.
Цитата Сообщение от SuperKir Посмотреть сообщение
я сразу
Я сразу принимаю Ваш ответ.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.05.2018, 08:30
Помогаю со студенческими работами здесь

Область видимости и время жизни переменных внутри класса
Есть класс, определение в файле myclass.h, реализация myclass.cpp Как и где правильно определить глобальную переменную, чтоб ее значение...

Напишите конструктор для инициализации объекта класса Time, который может использовать текущее время, возвращаемое функцией time ().
Помогите пожалуйста написать программу на С++. Просто скоро курсовую сдавать, а классы мы еще не разобрали и не успеваем. Поэтому не знаю...

C++11 время жизни переменных
После долгого перерыва в программирование вновь спохватился и тут наткнулся на такую не ожиданность #include <iostream> ...

Время жизни переменных
Добрый вечер. у меня такая проблема. мне нужно перегрузить функцию для моего класса: numb numb::operator +(const numb &p)const { ...

Время жизни объектов
Вроде простая вещь, а не могу понять почему так. #include <iostream> using namespace std; int* f() { int a = 7; int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере 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-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru