【问题标题】:Will memory of array member of a class be allocated?将分配类的数组成员的内存吗?
【发布时间】:2012-11-15 11:28:38
【问题描述】:

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

【问题讨论】:

  • newed 数组中的所有指针之后,您可以使用指针数组。

标签: c++ arrays class memory


【解决方案1】:
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]???
  }

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

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

【讨论】:

    【解决方案2】:

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

    不过,您应该做的是使用std::vector&lt;B&gt;

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        您还应该担心在 A 的析构函数中显式释放内存资源。

        【讨论】:

        • 我认为系统可能只为成员分配一个指针。
        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2017-03-22
          • 1970-01-01
          • 2017-09-09
          • 2011-07-18
          • 1970-01-01
          • 2012-12-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多