0

c++でクラスの配列メンバのメモリを確保するかどうか迷っています。
私のクラスでは、配列メンバーを次のように定義しました。

class A
{
  public:
    B* B_array[1000];
}

そして、コンストラクターでそれを使用したい:

A::A()
{
  for(int i = 0; i < 1000; i++)
  {
     B_array[i] = new B;//can i use B_array[0...999]???
  }
}
4

5 に答える 5

2
B* B_array[1000];

あなたが持っているのは1000、 type へのポインタの配列ですB

  for(int i = 0; i < 1000; i++)
  {
       B_array[i] = new B;//can i use B_array[0...999]???
  }

配列内の各ポインターにメモリーを割り当てます。このステートメントの後、各ポインターはヒープ上のメモリーを指します。

はい、このコードが実行されると、それぞれを使用できます。

于 2012-11-15T11:30:33.110 に答える
2

はい、できます。コンストラクターの本体に入ると、初期化されるのを待っている初期化されていないポインターが 1000 個あります。

ただし、使用する必要があるのstd::vector<B>

class A
{
  public:
     std::vector<B> array;
}

A::A() : array(1000) {}

そしてそれで終わります。ベクターはその要素を動的に割り当てます。

于 2012-11-15T11:33:51.160 に答える
1

はい、できます。1000 個のポインタのメモリが常に割り当てられます。ただし、これらのポインターは、自分で行わない限り初期化されません (コンストラクター コードにいるため)。

于 2012-11-15T11:31:41.010 に答える
0

c++でクラスの配列メンバのメモリを確保するかどうか迷っています

はい、そうではありません。あなたが行っている方法で配列を割り当てることについて疑問がある場合は、可能です。A のコンストラクターにいる間に B のコンストラクターを呼び出すことに疑問がある場合、それについてもまったく問題はありません。

ただし、一般的には、示されているコードで注意すべき点がいくつかあります。たとえば、値 1000 をハードコーディングしない、new からの例外をチェックするなどです。おわかりいただけると思います。

また、A のデストラクタでメモリ リソースを明示的に解放することにも気を配る必要があります。

于 2012-11-15T11:36:18.027 に答える
0

はい、B クラス インスタンスの 1000 個のポインターのメモリが割り当てられます。オブジェクトの配列B_array[1000]を定義しました。B*と同じint integerArray [1000]です。値ではなく、ポインターを配列に格納するだけです。ただし、ヒープ上の実際のオブジェクトを指すように初期化する必要があります。

于 2012-11-15T11:37:53.017 に答える