2013-06-02 60 views
0
我創建此陣列對象的

基本上我想創建與從一類通過傳遞到另一個即將如何使用指針

Object * ArrayOfObjects = new Object[Size]; 

雖然成功地創建了一個陣列的大小的對象的陣列,它不允許我使用構造函數。

如何創建我的對象數組然後定義數組中的每個對象?

+1

你必須遍歷數組,並創建每個對象。你的語句只是爲一個數組分配內存,它不會初始化這些對象。 (想想,如果Object是一個抽象類呢?) – GJK

+0

可能的重複:http://stackoverflow.com/questions/4754763/c-object-array-initialization-without-default-constructor – jrd1

回答

3

一旦你爲數組分配內存,然後你可以通過循環分配給它:

for (int i = 0; i < Size; ++i) 
{ 
    ArrayOfObjects[i] = Object(/* call the constructor */); 
} 

或者你可以使用一個向量做同樣的,但更多的易用性:

std::vector<Object> ArrayOfObjects = { Object(...), Object(...) }; 
0

一旦你分配了記憶,就像你一樣。通過遍歷對象數組 並調用其構造函數來初始化每個對象。

#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 
    ... 
} 
1

什麼你問實際上可能沒有做的最好的事情 - 這將是使用類似的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); 
}