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

  • Автор темы 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: