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;