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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
#1

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

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

Здраствуйте! Имеется большой класс импортирующий данные из файлов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2014, 18:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель и инициализация объекта класса (C++):

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

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

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

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

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

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

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

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

указатель на указатель или присваивание объекта - C++
Доброе утро. Вот я в своем классе создал параметр class TTo4ka { ... TGrup **MyGrup; ... };

Функция, получающая указатель на обычную функцию, получает указатель на метод класса - C++
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и...

Создать класс CheckerBoard (особенности строения класса - инициализация константных членов класса) - C++
Вот код: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; const int xSize = 1; const int ySize = 1; class...

Инициализация членов дочернего класса членами класса родителя - C++
Есть уже созданный класс-родитель A. Как эффективно инициализировать дочерний класс B членами класса A?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.05.2014, 18:59
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru