2016-12-06 10 views
-1

Мне не удается создать динамический массив объектов класса внутри класса на C++. Понятие: предположим, что у нас есть класс A. В этом классе я хочу иметь массив объектов с тем же типом класса (например, массив A *), память которого будет распределяться динамически (мы не знаем, размер этого массива в начале). В main() Я хочу создать массив из 2 объектов. Первый будет иметь массив с 3 элементами класса A, а второй объект с 6 элементами. Таким образом, каждый объект будет иметь свой собственный массив. Вот мои мысли:Создайте динамический массив объектов класса внутри класса в C++

Основная концепция:

|_|_|_| //Array with 3 elements of class A in object A 

| _____ |_|_|_|_|_|_| //Array with 6 elements of class A in object B 
| | 
|A||B| //Basic array with 2 elements 


class A { 
    A* array; 
    public: 
    A(int k) { 
     //array = new A[k]; //this doesn't work because it calls the default constructor. 
     int i; 
     for (i = 0; i < k; i++) 
     array = new A(k); //This doesn't work either. 
     cout << "A created." << endl; 
    }; 
    ~A() { 
     cout << "Destroying A!" << endl; 
    } 
}; 

int main() { 
    A *ar[2]; 
    for (i = 0; i < 2; i++) { 
    if(i == 0) { 
     ar[i] = new A(3); 
    } else { 
     ar[i] = new A(6); 
    } 
    } 
    return 0; 
} 

Спасибо заранее.

+2

Используйте период 'std :: vector'! –

+0

Благодарим вас за ответ. Векторы - лучшая реализация, но это проект, в котором я не могу их использовать. – Vkt678

+0

'std :: vector' не решит проблему бесконечной рекурсии. Где вы остановите гнездование? –

ответ

0

Вы должны использовать зЬй :: вектор, но если вы должны использовать массивы, синтаксис для динамического объявить один

type * name = new type[size]; 

Таким образом, вы бы

A * arr = new A[k]; 

Размер будет переменной, у вас есть, и вам придется изменять размер массива каждый раз, когда ему нужно расти, создавая собственную функцию grow(), которая представляет огромную боль. Просто используйте векторы!

EDIT: Ваша программа также загружает iwth утечки памяти. Векторы автоматически обмениваются данными, но каждый раз, когда вы используете новый для создания массива, вы должны удалить этот массив с помощью

delete [] name; 
Смежные вопросы