Динамическая память

  • Автор темы Vyacheslavovich
  • Дата начала
V

Vyacheslavovich

Гость
#1
Помогите разобраться с указателями, ссылочными типами... динамической памятью на С++.. сколько не читал - толком не могу понять, как это работает. Как, например, создать динамический массив, размер которого заранее неизвестен.. используя при этом указатели? Только понятными словами чтобы...
 

grigsoft

Well-Known Member
15.11.2005
735
0
#2
Так а что непонятно-то? Память выделяется определенного размера под то, что ты хочешь там разместить. Чтобы сделать динамический массив, ты выделяешь столько памяти сколько нужно сначала, потом при необходимости выделяешь новый, больший, кусок заново, копируя старые данные туда, либо делаешь realloc, пытаясь расширить доступную область.
 
M

Mice

Гость
#3
Эм... а можно я еще вопросика подкину? Т.е., как я поняла, глядя на многочисленные книжные примеры, как - никак, а размерность по крайней мере массива указателей придется задавать, и уже потом выделять память для объектов, но максимальное их число все равно будет 100? Ну, типа такого?

Код:
MyClass* ptr[100];
int n = 8;
for (int i = 0; i < n; i++)
ptr[i] = new MyClass;
Ну, и вариации... но если я в итоге использую все сто указателей из массива, а все равно мало будет? Можно ли как - то сделать что - то совсем уж безразмерное, или придется просто выделять заново больший кусок памяти и копировать все туда, а эту очищать? Это, наверное, затратно по времени, да и памяти ведь нужно иметь в два раза больше на случай такого копирования... (realloc вроде в c++ уже нету. Разве что от сишки. В любом случае, с операцией new он ведь не будет работать) Простите, если совсем ламерский вопрос задаю, ^_^ просто к слову пришлось - всегда у знакомых спрашивала, но никто ответить не мог, а тут как раз тема появилась..
 
M

Mice

Гость
#5
@rtem
int* arr = new int[n]; ?

Ну ведь все равно размерность задается?


P.S: можно не отвечать ^_^ только что подумала про std::vector.

Туплю ;)
 

grigsoft

Well-Known Member
15.11.2005
735
0
#6
Mice
Какая разница - вектор будет делать тоже самое - выделять новый фрагмент, копировать из старого. Долго? зависит от подхода - если у вас 100тыс. объектов, а вы будете их добавлять по 50, то да, будет долго. Безразмерного все равно не будет.
 
M

Mice

Гость
#8
grigsoft Да. Спасибо за ответ, теперь смогу спать спокойно, не думать о безразмерных массивах :please: