【发布时间】:2015-06-10 05:57:34
【问题描述】:
我正在尝试动态分配对象数组。我的每一件物品 在他们的构造函数中有一个必须初始化的参数。我宁愿在施工时初始化它们,因为我认为这会节省时间。如何在分配时使用需要参数的构造函数初始化动态分配的对象数组?
class Thingy{
private:
int* a;
public:
Thingy(int size);
};
class ThingyLayer{
private:
Thingy* m_things;
public:
ThingyLayer(int n){
m_things = new Thingy[n]; //!< How do I pass a param here to the ctor of Thingy
}
};
在这种情况下,我不想使用std::vector,因为有一天我可能想在不支持 STL 的嵌入式系统上运行它,比如 Atmel AVR 芯片。所以我正在寻找如何使用指针来做到这一点。
我已经尝试过了,m_things = new Thingy[n](val),但这不起作用,因为它会引发编译器警告。我还查看了Dynamically allocating an array of objects,但这并没有回答我的问题。
【问题讨论】:
-
所有元素的参数相同?
-
@Christophe 所有参数都相同。
-
语言中存在一个特性并不意味着它应该被使用。
new的数组形式就是其中之一。 -
显然,AVR 有
std::vector,对于 16k 芯片来说足够小:andybrown.me.uk/wk/2011/01/15/…(未选中,我从未使用过)。 -
您可以重载 operator new[] 以允许传递参数,或使用参数的默认值。见drdobbs.com/cpp/calling-constructors-with-placement-new/…