2016-12-06 10 views
-1

C++のクラス内にクラスオブジェクトの動的配列を作成する際に問題があります。概念は次のとおりです:私たちはクラスAを持っていると仮定します。このクラスでは、メモリが動的に割り当てられる同じタイプのクラス(例えばA *配列)を持つオブジェクトの配列が必要です。この配列の最初のサイズ)。 main()で2つのオブジェクトの配列を作成したいと思います。最初のクラスは、クラスAの3つの要素と、6つの要素を持つ2つ目のオブジェクトを持つ配列を持ちます。したがって、すべてのオブジェクトは独自の配列を持ちます。ここに私の考えは以下のとおりです。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' periodを使用してください! –

+0

回答ありがとうございます。ベクトルは最高の実装ですが、これは私がそれらを使用することを許可されていないプロジェクトです。 – Vkt678

+0

'std :: vector'は無限の再帰問題を解決しません。どこでネスティングをやめますか? –

答えて

0

あなたはSTDを使用する必要があります::ベクトルが、あなたは配列を使用する必要がある場合は、動的に宣言するための構文はあなたが

A * arr = new A[k]; 

サイズは、その変数になるだろう

type * name = new type[size]; 

です巨大な痛みである独自のgrow()関数を作成することで、必要になるたびに配列のサイズを変更する必要があります。ただベクトルを使用してください!

EDIT:プログラムにもiwth memory leaksがロードされています。ベクトルはこれらを自動的に隠しますが、新しい配列を作成するたびに配列を削除する必要があります。

delete [] name; 
関連する問題