堆数组中对象的构造函数[重复]
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]);
我可以使用malloc
和free
,然后使用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。也许我会对这两种实现进行一些基准测试,看看我得到了什么。谢谢!以上是关于堆数组中对象的构造函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章