2016-10-10 9 views
0

C++配列でいくつかの概念を理解するのに少し問題があります。C++オブジェクトの配列を初期化する

  1. 私の割り当てで、私は以下のコードのようにしました。私が言うことから、これは[size] Object1オブジェクトのヒープ上にスペースを作成するだけでなく、それらもすべて初期化します。誰かがヒープ上で起こっていることを正確に説明して、ここにスタックできますか?

    class Object1 
    { 
        Private: 
        int dummy; 
        Public: 
        Object1(); 
    }; 
    
    Object1::Object1() 
    { 
        dummy = 1; 
    } 
    
    class Foo 
    { 
        private: 
        Object1 * myObject; 
    
        public: 
        Foo(int size); 
    }; 
    
    Foo::Foo(int size) 
    { 
        myObject = new Object1[size]; 
    } 
    
  2. オブジェクト1のコンストラクタは、どちらかといえば、スタックやヒープ上に異なっ起こる、その後何、以下のコードのように、パラメータを取っていた場合は? object1の各インスタンスにパラメータを送信するわけではないので、オブジェクトを初期化するか、スペースを作成するだけですか?

    class Object1 
    { 
        Private: 
        int dummy; 
        Public: 
        Object1(int myInt); 
    }; 
    
    Object1::Object1(int myInt) 
    { 
        dummy = myInt; 
    } 
    
  3. また、以下のコードも見ました。この場合、何が起きていますか?それは上記のケースとどう違うのですか?

    myclass *array[10]; 
    for (int i = 0 ; i != 10 ; i++) { 
        array[i] = new myclass(); 
    } 
    

私が割り当てを完了したが、ちょうど私が舞台裏で何が起こっているか理解しておいてくださいしようとしています。

ありがとうございました。

答えて

0

あなたのクラスは、デフォルトコンストラクタを持っていない場合は、使用することはできません。

myObject = new Object1[size]; 

myObject = new Object1[size]; 

myclass *array[10]; 
for (int i = 0 ; i != 10 ; i++) { 
    array[i] = new myclass(); 
} 

の違い最初sizeのオブジェクトを割り当て、のオブジェクトの配列へのポインタを格納します。

2つ目は10個のオブジェクトを割り当てますが、10個のポインタがあります。各ポインタは、動的に割り当てられたオブジェクトを1つだけ指し示します。

関連する問題