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) {}

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

于 2012-11-15T11:33:51.160 回答
1

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

于 2012-11-15T11:31:41.010 回答
0

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

是的,为什么不。如果您怀疑以您正在做的方式分配数组,这是可能的。如果您的疑问是在仍在 A 的构造函数中时调用 B 的构造函数,那么也绝对没有问题。

但总的来说,我会在显示的代码中注意几件事,例如不硬编码值 1000、检查新的异常等。你明白了。

而且您还应该为显式释放 A 的析构函数中的内存资源而烦恼。

于 2012-11-15T11:36:18.027 回答
0

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

于 2012-11-15T11:37:53.017 回答