2012-11-15 35 views
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]??? 
    } 
} 
+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

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

2

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

什么你应该做,虽然是使用std::vector<B>

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

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

,并用它做。 Vector动态分配其元素。

0

不知是否存储了一类的阵列成员在C被分配++

是,为什么不。如果你怀疑是按照你所做的方式分配一个数组,这是可能的。如果你的疑问是关于在A的构造函数中调用B的构造函数,那么也完全没有问题。

但是,一般来说,在我显示的代码中我会注意几件事情。不硬编码的价值1000,检查从新等例外..你明白了。

你也应该对显式地释放A的析构函数中的内存资源感到困扰。

+0

我认为系统可能只会为成员分配一个指针。 – Al2O3

0

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