类定义中的对象数组

时间:2011-12-02 15:04:51

标签: c++ arrays

假设我有一个班级Foo。该类应存储Foo数组。我认为这样可行:

class Foo
{
private:
    Foo *myArray[];
    //...
public:
    Foo()
}

Foo::Foo()
{
    myArray = new Foo [10];
}

但事实并非如此。关于我缺少什么的任何建议?

2 个答案:

答案 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;