如何构造一个对象数组? C ++

时间:2014-07-15 19:02:00

标签: c++ arrays class object

所以我有class Star继承了另一个class CelestialBody。还有第三个class Planet

在我的班级Star中的私人部分,我有一组行星对象Planet* system和一个int n代表行星的数量。

问题是 - 我该如何构建它?我试过这个:

Star(char* newName, double newX, double newY, double newDiam, Planet* newSystem, int newN) : CelestialBody(newName, newX, newY, newDiam)
    {
        system = new Planet[newN];  
        system = newSystem;
        n = newN;
    }

但显然它不起作用......

感谢您提前帮助我!

1 个答案:

答案 0 :(得分:1)

这种重新分配是错误的:

system = new Planet[newSystem]; // <<== should be newN
system = newSystem;

你创建了一个数组,然后立即&#34;泄露了#34;它。您可以通过添加循环来解决此问题,如下所示:

system = new Planet[newN]; 
for (int i = 0 ; i != newN ; i++) {
    system[i] = newSystem[i];
}

虽然这可行,但它不是最佳解决方案:一个原因是您的代码需要管理system[]数组,并在完成Star后删除它。 C ++标准库提供了更好的选择。

例如,您可以将system设为std::vector<shared_ptr<Planet>> - 即指向Planet的共享指针的向量。调用者会传递一个行星容器(它可能是指针和计数,就像你做的那样,但它也可能是一个真正的C ++容器)。