|
|
|
| Здравствуйте.
Подскажите пожалуйста, как во время исполнения программы динамически создавать новые объекты и вызывать их методы для работы с ними. Заранее количество их (объектов) неизвестно, но можно ограничиться некоторым максимумом, скажем 2048... | |
|
|
|
|
|
|
|
для: Dark Felex
(28.01.2007 в 16:54)
| | Хм... просто выделяйте под объект память.
Если вам требуется множество объектов выделяйте массив объектов
int *obj = new prt[2048]; |
Только не забудте потом осовобдить выделенную память при помощи оператора delete []
| |
|
|
|
|
|
|
|
для: cheops
(28.01.2007 в 17:18)
| | Ну это само собой.
А если предположим, у меня прога начинает выполняться и работает с... 5-ю объектами. А потом появляется необходимость чтобы был еще один. Вот как мне создать этот 6-ой?.. Дело в том что я не хочу сразу выдеять много памяти, чем-то мне это дело не нравится.
Я вообще думал так: можно написать функцию, которая будет инитиировать новые объекты и возвращать на них указатели или предварительно эти указатели занося в некий список (глобальный). А в каждом объекте есть переменная уникальная для него (ID) и перебирая все объекты я мог бы найти адрес нужного мне, и дальше уже делать с ним все что только не захочется.
Я заблуджаюсь и это все на самом деле бред пьяного суслика, или какая-то нормальная идея тут есть?.. | |
|
|
|
|
|
|
|
для: Dark Felex
(29.01.2007 в 19:56)
| | Не очень понятно, объекты находятся массиве? | |
|
|
|
|
|
|
|
для: cheops
(29.01.2007 в 20:03)
| | Нет, в том то и дело.
Можно, не спорю, создать массив объектов, но под это уйдет ведь много памяти?.. | |
|
|
|
|
|
|
|
для: Dark Felex
(30.01.2007 в 11:32)
| | > но под это уйдет ведь много памяти?
Да собственно столько же, сколько под отдельные объекты, просто объекты в памяти будут расположены один подле другого и появится возможность использовать арифметику указателей (на чём собственно индексация массива и построена)...
PS Можно поместить объекты в коллекцию STL, например в vector - там в любой момент можно динамически добавить в коллекцию новый элемент или удалить старый. | |
|
|
|
|
|
|
|
для: cheops
(30.01.2007 в 13:37)
| | Пойду учиться как это делать.
Кстати, а как это делается? =) Ну если не влом описать?.. | |
|
|
|
|
|
|
|
для: Dark Felex
(31.01.2007 в 20:52)
| | В самом простейшем случае работа с контейнером vector может выглядит следующим образом
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// Вектор с целочисленными элементами
vector<int> coll;
int count = 0;
cout << "Введите число ";
cin >> count;
try
{
// Заполняем коллекцию
for(int i = 1; i <= count; i++)
{
coll.push_back(i);
}
// Выводим содержимое коллекции
for(int i = 0; i < coll.size(); i++)
{
cout << coll[i] << ' ';
}
cout << "\n";
}
catch(bad_alloc)
{
cout << "Не удалось выделить память под коллекцию\n";
}
return 0;
} |
| |
|
|
|