Вы можете создать массив объектов на стеке † через:
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);
Вектор представляет собой динамический массив, (по умолчанию) выделяет элементы из кучи. ††
Поскольку ваш класс не имеет конструктора не по умолчанию, чтобы создать его в стек вам нужно, чтобы компилятор знал, что передать в конструктор:
myarray stackArray[3] = { 1, 2, 3 };
Или с вектором :
// 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". У нас есть время «автоматического хранения» и «динамического хранения». На практике это выравнивается с распределением стека и распределением кучи.
†† Если вам требуется «динамическое» выделение из стека, вам нужно определить максимальный размер (хранилище стека известно заранее), а затем дать вектору новый распределитель, чтобы вместо этого использовать стек.
Это вопрос домашней работы? Это звучит как один. – Amber
Nope ... Это не вопрос о домашнем задании ... Нашел это в Интернете во время подготовки к собеседованию .... :) –