我想知道类的数组成员的内存是否在 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
指向 type 的指针数组B
。
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、检查新的异常等。你明白了。
而且您还应该为显式释放 A 的析构函数中的内存资源而烦恼。
是的,将分配用于 B 类实例的 1000 个指针的内存。B_array[1000]
您已经定义了一个对象数组B*
。它与 相同int integerArray [1000]
。您只需将指针存储在数组中,而不是值。但是,您需要将它们初始化为指向堆上的实际对象。