考虑以下代码:
class myarray
{
int i;
public:
myarray(int a) : i(a){ }
}
如何在栈上创建myarray的对象数组,如何在堆上创建对象数组?
最佳答案
您可以通过以下方式在堆栈上创建对象数组†:
myarray stackArray[100]; // 100 objects
在堆上†(或“freestore”):
myarray* heapArray = new myarray[100];
delete [] heapArray; // when you're done
但最好不要自己管理内存。相反,请使用 std::vector :
#include <vector>
std::vector<myarray> bestArray(100);
vector 是一个动态数组,它(默认情况下)从堆中分配元素。††
因为你的类没有默认构造函数,要在堆栈上创建它,你需要让编译器知道将什么传递给构造函数:
myarray stackArray[3] = { 1, 2, 3 };
或者用一个 vector :
// C++11:
std::vector<myarray> bestArray{ 1, 2, 3 };
// C++03:
std::vector<myarray> bestArray;
bestArray.push_back(myarray(1));
bestArray.push_back(myarray(2));
bestArray.push_back(myarray(3));
当然,你总是可以给它一个默认的构造函数:
class myarray
{
int i;
public:
myarray(int a = 0) :
i(a)
{}
};
† 对于学究:C++ 并没有真正的“堆栈”或“堆”/“freestore”。我们拥有的是“自动存储”和“动态存储”持续时间。实际上,这与堆栈分配和堆分配保持一致。
††如果你想从堆栈中“动态”分配,你需要定义一个最大大小(堆栈存储提前知道),然后给 vector 一个新的分配器,以便它使用堆栈。
关于c++ - 在堆栈和堆上创建对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1598397/