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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Vyacheslavovich, 9 июн 2010.

  1. Vyacheslavovich

    Vyacheslavovich Гость

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

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Так а что непонятно-то? Память выделяется определенного размера под то, что ты хочешь там разместить. Чтобы сделать динамический массив, ты выделяешь столько памяти сколько нужно сначала, потом при необходимости выделяешь новый, больший, кусок заново, копируя старые данные туда, либо делаешь realloc, пытаясь расширить доступную область.
     
  3. Mice

    Mice Гость

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

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

    @rtem Гость

    нужно создавать динамический массив
     
  5. Mice

    Mice Гость

    @rtem
    int* arr = new int[n]; ?

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


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

    Туплю ;)
     
  6. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Mice
    Какая разница - вектор будет делать тоже самое - выделять новый фрагмент, копировать из старого. Долго? зависит от подхода - если у вас 100тыс. объектов, а вы будете их добавлять по 50, то да, будет долго. Безразмерного все равно не будет.
     
  7. Mice

    Mice Гость

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

Поделиться этой страницей