我想知道是否在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 :(得分:2)
是的,你可以。当你输入构造函数体时,有1000个未初始化的指针等着你初始化它们。
应该做的是使用std::vector<B>
class A
{
public:
std::vector<B> array;
}
A::A() : array(1000) {}
并完成它。 Vector动态分配其元素。
答案 2 :(得分:1)
是的,你可以。将始终分配1000个指针的内存。但是这些指针不会被初始化,除非你自己这样做(因为你在你的构造函数代码中)。
答案 3 :(得分:0)
我想知道是否在c ++中分配了类的数组成员的内存
是的,为什么不呢。如果您怀疑是按照自己的方式分配数组,那么这是可能的。如果您怀疑是在使用B&#39的构造函数时仍然使用B&#39的构造函数,那么也绝对没有问题。
一般情况下,我会在显示的代码中注意几件事情,例如:没有硬编码值1000,检查新的异常等等。你明白了。
您还应该明确地在A的析构函数中释放内存资源。
答案 4 :(得分:0)
是的,将分配1000个B类实例指针的内存。您已定义B_array[1000]
个B*
个对象的数组int integerArray [1000]
。它与{{1}}相同。您只是将指针存储在数组中,而不是值。
但是,您需要初始化它们以指向堆上的实际对象。