堆数组中对象的构造方法

时间:2019-03-22 00:41:40

标签: c++ c++11 pointers constructor

所以,我有一个带有构造函数的对象。该对象不支持空的构造函数,因为必须在构造函数中分配常量。像这样:

class Object {
public:
    const int foo;

    Object(int f) : foo(f) {
        // other stuff
    }
}

现在,我还有另一个功能可以保持动态分配的对象数组。

Object* objects;

我需要能够使用new[]delete[]分配此内存,但也要使用构造函数。我似乎不知道该怎么做。

像这样的事情会很理想

objects = new Object[numObjects];
for (int i = 0; i < numObjects; ++i) {
    object[i](foos[i]);
}

我可以先使用mallocfree,然后再使用new这些对象,但这并不理想,因为我必须遍历析构函数中的对象并手动进行析构它们,然后释放内存。看起来很乱。

1 个答案:

答案 0 :(得分:1)

您可以使用列表初始化:

objects = new Object[3]{1, 2, 3};

但这仅适用于恒定大小的数组。

  

我可以使用malloc和free,然后在适当的位置添加新对象

这确实是创建动态长度数组的方式,该数组包含非默认构造类型的对象。除了代替malloc以外,用std::byte分配new[]的数组会更加习惯。这也是如何分配要在以后创建的一定数量对象的数组。

但是您不需要自己写,因为标准库为您提供了std::vector,它可以为您完成此任务:

std::vector<Object> mycars(numObjects, Object(42));