繁体   English   中英

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

[英]Will memory of array member of a class be allocated?

我想知道是否在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]???
  }
}
B* B_array[1000];

您拥有的是一个指向B类型的1000指针的数组。

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

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

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

是的你可以。 当您输入构造函数的主体时,有1000个未初始化的指针等待您对其进行初始化。

但是,您应该使用std::vector<B>

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

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

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

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

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

是的,为什么不。 如果您怀疑要按照自己的方式分配数组,则有可能。 如果您怀疑在仍处于A的构造函数中的同时调用B的构造函数,则绝对没有问题。

通常,但是在显示的代码中,我需要注意几件事,例如,不对值1000进行硬编码,从new中检查异常等。您明白了。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM