基本上我想創建與從一類通過傳遞到另一個即將如何使用指針
Object * ArrayOfObjects = new Object[Size];
雖然成功地創建了一個陣列的大小的對象的陣列,它不允許我使用構造函數。
如何創建我的對象數組然後定義數組中的每個對象?
基本上我想創建與從一類通過傳遞到另一個即將如何使用指針
Object * ArrayOfObjects = new Object[Size];
雖然成功地創建了一個陣列的大小的對象的陣列,它不允許我使用構造函數。
如何創建我的對象數組然後定義數組中的每個對象?
一旦你爲數組分配內存,然後你可以通過循環分配給它:
for (int i = 0; i < Size; ++i)
{
ArrayOfObjects[i] = Object(/* call the constructor */);
}
或者你可以使用一個向量做同樣的,但更多的易用性:
std::vector<Object> ArrayOfObjects = { Object(...), Object(...) };
一旦你分配了記憶,就像你一樣。通過遍歷對象數組 並調用其構造函數來初始化每個對象。
#include<iostream>
using namespace std;
class Obj
{
public:
Obj(){}
Obj(int i) : val(i)
{
cout<<"Initialized"<<endl;
}
int val;
};
int allot(int size)
{
Obj *x= new Obj[size];
for(int i=0;i<10;i++)
x[i]=Obj(i);
//process as you need
...
}
什麼你問實際上可能沒有做的最好的事情 - 這將是使用類似的std ::向量或東西,但引擎蓋下是什麼,他們要做的就是你無論如何,問題都會問到。
然後你就可以分配或放置新的每一個條目:
for (size_t i = 0; i < Size; ++i)
{
// Option 1: create a temporary Object and copy it.
ArrayOfObjects[i] = Object(arg1, arg2, arg3);
// Option 2: use "placement new" to call the instructor on the memory.
new (ArrayOfObjects[i]) Object(arg1, arg2, arg3);
}
你必須遍歷數組,並創建每個對象。你的語句只是爲一個數組分配內存,它不會初始化這些對象。 (想想,如果Object是一個抽象類呢?) – GJK
可能的重複:http://stackoverflow.com/questions/4754763/c-object-array-initialization-without-default-constructor – jrd1