假设我有一个班级Foo
。该类应存储Foo
数组。我认为这样可行:
class Foo
{
private:
Foo *myArray[];
//...
public:
Foo()
}
Foo::Foo()
{
myArray = new Foo [10];
}
但事实并非如此。关于我缺少什么的任何建议?
答案 0 :(得分:5)
此代码存在两个问题。首先,您的数组声明语法不正确,并在编译期间抛出错误。你应该像这样声明数组指针:
Foo* myArray;
其次,如果您尝试实例化Foo对象,您将创建一个无限循环。这是因为new关键字将调用它正在创建的对象的默认构造函数。对于您实例化的每个Foo,将在构造函数中实例化10个,然后每个将创建10个以上的Foo对象。你可以通过在类中使用一个单独的方法来解决这个问题,该方法实例化数组,并且希望不会在每个Foo对象上调用它。
答案 1 :(得分:1)
另外,您应避免在Foo
类中使用Foo
类型的字段,因为这会创建无限的创建循环。我假设这只是示例代码,而您的实际代码看起来并不像那样。
至于你的实际问题,这个:
Foo *myArray[];
声明一个指针数组。如果你想要一组objets,那么你有几个选择。
如果在编译时已知对象的数量,则可以使用C数组:
Foo myArray[10];
如果您有C ++ 11编译器,则可以在C ++ 98/03中使用std::array
(或boost::array
):
std::array<Foo, 10> myArray;
如果您不知道大小,那么当然您将不得不使用动态分配。但是,我强烈建议您不要自己进行分配,而是将其留给其他人,例如std::vector
:
std::vector<Foo> myArray;