2013-06-02 22 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); 
}