所以,我有一个带有构造函数的对象。该对象不支持空的构造函数,因为必须在构造函数中分配常量。像这样:
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
这些对象,但这并不理想,因为我必须遍历析构函数中的对象并手动进行析构它们,然后释放内存。看起来很乱。
答案 0 :(得分:1)
您可以使用列表初始化:
objects = new Object[3]{1, 2, 3};
但这仅适用于恒定大小的数组。
我可以使用malloc和free,然后在适当的位置添加新对象
这确实是创建动态长度数组的方式,该数组包含非默认构造类型的对象。除了代替malloc
以外,用std::byte
分配new[]
的数组会更加习惯。这也是如何分配要在以后创建的一定数量对象的数组。
但是您不需要自己写,因为标准库为您提供了std::vector
,它可以为您完成此任务:
std::vector<Object> mycars(numObjects, Object(42));