是否会分配类的数组成员的内存?

时间:2012-11-15 11:28:39

标签: c++ arrays class memory

我想知道是否在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]???
  }
}

5 个答案:

答案 0 :(得分:2)

B* B_array[1000];

您所拥有的是1000类型的B指针数组。

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

将内存分配给数组中的每个指针,在此语句之后,每个指针指向堆上的内存。

所以,一旦执行此代码,您就可以使用它们中的每一个。

答案 1 :(得分:2)

是的,你可以。当你输入构造函数体时,有1000个未初始化的指针等着你初始化它们。

应该做的是使用std::vector<B>

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

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

并完成它。 Vector动态分配其元素。

答案 2 :(得分:1)

是的,你可以。将始终分配1000个指针的内存。但是这些指针不会被初始化,除非你自己这样做(因为你在你的构造函数代码中)。

答案 3 :(得分:0)

  
    

我想知道是否在c ++中分配了类的数组成员的内存

  

是的,为什么不呢。如果您怀疑是按照自己的方式分配数组,那么这是可能的。如果您怀疑是在使用B&#39的构造函数时仍然使用B&#39的构造函数,那么也绝对没有问题。

一般情况下,我会在显示的代码中注意几件事情,例如:没有硬编码值1000,检查新的异常等等。你明白了。

您还应该明确地在A的析构函数中释放内存资源。

答案 4 :(得分:0)

是的,将分配1000个B类实例指针的内存。您已定义B_array[1000]B*个对象的数组int integerArray [1000]。它与{{1}}相同。您只是将指针存储在数组中,而不是值。 但是,您需要初始化它们以指向堆上的实际对象。