C ++如何初始化堆中的对象数组

时间:2011-11-03 23:36:18

标签: c++

给定一个简单的类MyClass,其构造函数接受两个int,如何在中初始化MyClass数组?

我试过

MyClass *classes[2] = { new MyClass(1, 2),
                        new MyClass(1, 2) };

但这似乎不起作用。感谢

1 个答案:

答案 0 :(得分:1)

使用std::allocator<MyClass>进行此操作。

std::allocator<MyClass> alloc;
MyClass* ptr = alloc.allocate(2);  //allocate
for(int i=0; i<2; ++i) {
    alloc.construct(ptr+i, MyClass(1, i)); //construct in C++03
    //alloc.construct(ptr+i, 1, i); //construct in C++11
}

//use

for(int i=0; i<2; ++i) {
    alloc.destroy(ptr+i); //destruct
}
alloc.deallocate(ptr); //deallocate

请注意,您不必构建您分配的所有内容。

或者,更好的是,只需使用std::vector

[编辑] KerrekSB认为这更简单:

MyClass** ptr = new MyClass*[3];
for(int i=0; i<4; ++i)
    ptr[i] = new MyClass(1, i);

//use

for(int i=0; i<4; ++i)
   delete ptr[i];
delete[] ptr;

访问速度稍慢,但更容易使用。