堆数组中对象的构造函数[重复]

Posted

技术标签:

【中文标题】堆数组中对象的构造函数[重复]【英文标题】:Constructor of objects in heap array [duplicate] 【发布时间】:2019-03-22 00:41:39 【问题描述】:

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

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

【问题讨论】:

尝试将常量设为静态。 使用std::vector,您将能够做到这一点。 @Gardener 对象之间的常量不同。 @Phil1970 我正在努力保持实现紧凑、快速和低内存。 【参考方案1】:

你可以使用列表初始化:

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

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

我可以使用 malloc 和 free,然后新建对象

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

但是没有必要自己写,因为标准库为你提供了std::vector,它会为你做这个:

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

【讨论】:

为了速度和内存,我不想使用 std::vector。我可能会选择malloc。也许我会对这两种实现进行一些基准测试,看看我得到了什么。谢谢!

以上是关于堆数组中对象的构造函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将参数从php中的数组传递给构造函数[重复]

Python构造函数

对带有数组的构造函数的未定义引用[重复]

使用受保护构造函数和复制构造函数创建 C++ 非堆工厂对象

JavaScript - 从多个数组填充对象构造函数

Java - 在构造函数中初始化数组[重复]