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

标签 c++

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

我试过了

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

但这似乎行不通。谢谢

最佳答案

使用 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;

它的访问速度稍慢,但更易于使用。

关于C++如何初始化堆中的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8003276/

相关文章:

c++ - 以编程方式允许对注册表项进行写访问

c++ - 我的服务器代码有什么问题(C++)

c++ - 性能对象属性与范围变量

c++ - 我可以写入嵌入式资源文本文件吗?

c++ - 包含 C++ 字符串的文本文件中的字符串

c++ - 运行时出现 MSVCR100D.dll 错误

C++17 使用模板参数推导指南继承 lambda 集

c++ - delete[] 在析构函数中分配的内存抛出错误

c++ - QStrings 上的 AES 加密,libcrypto++

c++ - 自定义可检查/可切换 QFrame 小部件