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

C++ C++;如何初始化堆中的对象数组,c++,C++,给定一个简单的类MyClass,其构造函数接受两个int,如何初始化堆中的MyClass数组 我试过了 MyClass *classes[2] = { new MyClass(1, 2), new MyClass(1, 2) }; 但这似乎不起作用。为此,请使用std::allocator std::allocator<MyClass> alloc; MyClass* ptr = alloc.allocate(2); //alloc

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

我试过了

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

但这似乎不起作用。为此,请使用
std::allocator

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

它的访问速度稍慢,但使用起来容易得多。

您发布的代码可以编译。不过,数组在堆栈上,指针在堆栈上heap@MooingDuck:否:指针在堆栈上,对象在堆上。@KerrekSB:我写错了。指针数组在堆栈上,对象在堆上。不管怎样,他说这不是他想要的。@KerrekSB:你有没有其他方法来构造一个参数不同的对象数组?我想不出一个。(并不是说没有,我只是想不起来)好吧,OP的代码实际上是正确的,而且基本上是正确的,所以我不确定现在的问题在哪里…@KerrekSB:因为一个本地的固定大小(堆栈上指向(堆上对象)的数组(指针)不是他想要的,他一定想要一个实际的(堆上对象的动态数组))我们显然需要在这些句子周围加上括号:-)好吧,OP应该说明她的需要;就目前情况而言,我不确定问题出在哪里。实际上,我经常用括号括起这样的句子,直到有人告诉我把它删掉,重写一遍,让它们第一次有意义。
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;