我想知道是否在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]???
}
}
我想知道是否在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];
你有什么是数组1000
指向类型B
的指针。
for(int i = 0; i < 1000; i++)
{
B_array[i] = new B;//can i use B_array[0...999]???
}
将内存分配给数组中的每个指针,在此语句之后,每个指针指向堆上的内存。
所以是的,你可以使用它们中的每一个,一旦执行这段代码。
是的,你可以。内存1000指针将始终分配。然而这些指针不会被初始化,除非你自己这样做(因为你在你的构造器代码中)。
是的,你可以。当你输入构造函数体时,有1000个未初始化的指针等待你初始化它们。
什么你应该做,虽然是使用std::vector<B>
class A
{
public:
std::vector<B> array;
}
A::A() : array(1000) {}
,并用它做。 Vector动态分配其元素。
不知是否存储了一类的阵列成员在C被分配++
是,为什么不。如果你怀疑是按照你所做的方式分配一个数组,这是可能的。如果你的疑问是关于在A的构造函数中调用B的构造函数,那么也完全没有问题。
但是,一般来说,在我显示的代码中我会注意几件事情。不硬编码的价值1000,检查从新等例外..你明白了。
你也应该对显式地释放A的析构函数中的内存资源感到困扰。
我认为系统可能只会为成员分配一个指针。 – Al2O3
是的,B类实例的1000个指针的内存将被分配。您已定义的B*
对象的数组。这与int integerArray [1000]
相同。您只需将指针存储在数组中,而不是值。 但是,您需要将它们初始化为指向堆上的实际对象。
您可以在数组中新建所有指针之后使用指针数组。 –