Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
1

Указатель и инициализация объекта класса

06.05.2014, 18:13. Показов 1483. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здраствуйте! Имеется большой класс импортирующий данные из файлов 3D-модели. В моём приложении он будет инициализироваться один раз для каждой отдельной модели, а потом в цикле будут тянуться из него данные для отображения этих моделей. Возник вопрос как лучше инициализировать каждый объект этого класса?
Сразу создавать указатель:
C++
1
2
3
4
5
6
7
ModelOBJ *terrain = new ModelOBJ;
terrain->import("models/terro.obj");
while (window.isOpen())
{
    RenderOBJModel(terrain);
}
delete terrain;
или можно просто
C++
1
2
3
4
5
6
ModelOBJ terrain;
terrain.import("models/terro.obj");
while (window.isOpen())
{
    RenderOBJModel(&terrain); // непосредственно в render передаем указатель на обьект
}
Обьектов может быть много и как бы во втором варианте не надо будет следить за удалением каждого такого объекта, но может быть первый вариант более правильный по поводу распределения памяти?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.05.2014, 18:13
Ответы с готовыми решениями:

Указатель на объект базового класса и адрес объекта производного класса
Пример кода: class Class1 { public: Class1(int x) { j = new int; *j = x; }...

Инициализация в классе статического объекта класса :)
Добрый день! Огромное спасибо за ваше внимание! Помогите разобраться с такой проблемой. Есть чисто...

Инициализация объекта из массива объктов класса
Ребята подскажите, как создать массив объектов класса с инициализацией каждого? CLASS1* class1; ...

Инициализация константного статического объекта - члена класса
Здравствуйте, у меня возникла проблема с инициализацией статического объекта, который является...

8
Будущее рядом
101 / 100 / 48
Регистрация: 06.03.2014
Сообщений: 342
06.05.2014, 18:23 2
GLS, первый вариант правильнее, вы выделяете место в оперативной памяти. А вот во втором случае, насколько я помню, памяти доступно не очень много
1
Заблокирован
06.05.2014, 18:24 3
Цитата Сообщение от GLS Посмотреть сообщение
ModelOBJ *terrain = new ModelOBJ;
В игре лучше делать динамические объекты <SMILE>id=323 alt=':Сумасшествие:'</SMILE>, т.к. твой объект возможно придётся удалить (на другую карту переключился, а этого объекта на этой карте нет.. и как ты будешь память из под статического освобождать? Делать какую - то функцию типа Clear :-) - бред) или же его удалить и заново инициализировать ....
В общем динамика!

Добавлено через 30 секунд
Цитата Сообщение от TenGen Посмотреть сообщение
А вот во втором случае, насколько я помню, памяти доступно не очень много
доступно не меньше, чем в первом варианте
1
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
06.05.2014, 18:26 4
GLS, второй вариант безопаснее - не нужно следить за освобождением памяти.
Другое дело, если заглянуть внутрь этого объекта - в нем уже может быть динамический массив, в который загружаются данные, например.
1
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
06.05.2014, 18:33  [ТС] 5
Цитата Сообщение от 0x10 Посмотреть сообщение
второй вариант безопаснее - не нужно следить за освобождением памяти.
А может получится так, что забьёт всю доступную память?
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
06.05.2014, 18:38 6
Цитата Сообщение от GLS Посмотреть сообщение
А может получится так, что забьёт всю доступную память?
Память не резиновая - ее и через new можно забить.
Другое дело, если в классе есть поле - статический массив, размер которого превышает системный лимит сегмента стека. Тогда программа аварийно завершится.
0
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
06.05.2014, 18:43  [ТС] 7
Ясно. Всем спасибо за ответы, скорей всего буду использовать всё таки первый вариант.
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
06.05.2014, 18:48 8
Доклад Страуструпа, примерно с 25 минуты - http://channel9.msdn.com/Event... Stroustrup
Слайд 24:
If you can, just use a scoped variable.
0
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
06.05.2014, 18:59  [ТС] 9
0x10, ок, гляну
0
06.05.2014, 18:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2014, 18:59
Помогаю со студенческими работами здесь

Создать копию объекта производного класса зная указатель на базовый
Добрый день! Вопрос в следующем... Возможно ли создать копию объекта производного класса зная...

Спрятать указатель на функцию класса в map и вызвать из другого объекта
Товарищи, пишу примитивный &quot;tcp-сервер&quot;. В его задачи входит принятие соединений и получение...

Создание полиморфного объекта, зачем создавать указатель на объект базового класса?
Зачем создавать указатель на объект базового класса: Base *A = new Derived Если можно сделать...

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru