堆数组中对象的构造函数

Constructor of objects in heap array

本文关键字:构造函数 对象 数组      更新时间:2023-10-16

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

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到位,但这并不理想,因为我必须遍历析构函数中的对象并手动销毁它们,然后释放内存。似乎很乱。

您可以使用列表初始化:

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

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

我可以使用malloc和free,然后将对象就位

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

但是没有必要自己写,因为标准库为您提供了 std::vector ,它为您执行此操作:

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