Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
06.05.2014, 18:13     Указатель и инициализация объекта класса #1
Здраствуйте! Имеется большой класс импортирующий данные из файлов 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 передаем указатель на обьект
}
Обьектов может быть много и как бы во втором варианте не надо будет следить за удалением каждого такого объекта, но может быть первый вариант более правильный по поводу распределения памяти?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2014, 18:13     Указатель и инициализация объекта класса
Посмотрите здесь:

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

Добавлено через 30 секунд
Цитата Сообщение от TenGen Посмотреть сообщение
А вот во втором случае, насколько я помню, памяти доступно не очень много
доступно не меньше, чем в первом варианте
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
06.05.2014, 18:26     Указатель и инициализация объекта класса #4
GLS, второй вариант безопаснее - не нужно следить за освобождением памяти.
Другое дело, если заглянуть внутрь этого объекта - в нем уже может быть динамический массив, в который загружаются данные, например.
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
06.05.2014, 18:33  [ТС]     Указатель и инициализация объекта класса #5
Цитата Сообщение от 0x10 Посмотреть сообщение
второй вариант безопаснее - не нужно следить за освобождением памяти.
А может получится так, что забьёт всю доступную память?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
06.05.2014, 18:38     Указатель и инициализация объекта класса #6
Цитата Сообщение от GLS Посмотреть сообщение
А может получится так, что забьёт всю доступную память?
Память не резиновая - ее и через new можно забить.
Другое дело, если в классе есть поле - статический массив, размер которого превышает системный лимит сегмента стека. Тогда программа аварийно завершится.
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
06.05.2014, 18:43  [ТС]     Указатель и инициализация объекта класса #7
Ясно. Всем спасибо за ответы, скорей всего буду использовать всё таки первый вариант.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
06.05.2014, 18:48     Указатель и инициализация объекта класса #8
Доклад Страуструпа, примерно с 25 минуты - http://channel9.msdn.com/Events/Goin...rne-Stroustrup
Слайд 24:
If you can, just use a scoped variable.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2014, 18:59     Указатель и инициализация объекта класса
Еще ссылки по теме:

BST дерево. Инициализация класса внутри класса C++
Указатель на объект базового класса и адрес объекта производного класса C++
Инициализация объекта из массива объктов класса C++

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

Или воспользуйтесь поиском по форуму:
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
06.05.2014, 18:59  [ТС]     Указатель и инициализация объекта класса #9
0x10, ок, гляну
Yandex
Объявления
06.05.2014, 18:59     Указатель и инициализация объекта класса
Ответ Создать тему
Опции темы

Текущее время: 21:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru