1

我有这段代码,我正在考虑简化:

if (numberOfResults > 1)
{

    trackResult_ = new TrackResult[numberOfResults];
    for (int i=0; i < numberOfResults; i++)
        {
            // Make a deep copy
            TrackResult tempResult = result[i];
            TrackResult * clone  = new TrackResult(tempResult);
            trackResult_[i]  = *clone;
        }

    storeJointResults(trackResult_, numberOfResults);
}
else
{
    trackResult_ = new TrackResult(*result);
}

(我“别无选择”,只能在这里使用一个简单的动态数组。在我的工作场所,向量被认为“太复杂”)

我想知道我是否可以逃脱

// even if we just have one result, we init an array size of one
trackResult_ = new TrackResult[numberOfResults];

但是,我在几个方面检查了结果的数量并采取了相应的行动

if (numberOfResults_ == 1)
{
   velocity = trackResult_.velocity;
}

那些代码还能用吗?如果不是,为什么?

4

4 回答 4

6

大小为 1 的数组不需要是特殊情况。

当你分配一个动态数组时,你会得到一个指向第一个元素的指针。如果数组的大小为 1,这与仅分配对象的单个实例几乎没有区别。

如果您更改了 . 到 -> 但是我建议不要对它进行特殊处理而只使用 trackResult_[0].velocity

于 2009-11-11T11:43:58.847 回答
3

向量怎么太复杂了?如果有的话,请简化您的代码。

于 2009-11-11T12:15:05.550 回答
3

不,您需要确保匹配正确的标量delete或数组delete[],具体取决于您是否说new TrackResult[n];new TrackResult;

此外,这会泄漏每次循环迭代的内存:

 TrackResult tempResult = result[i];
 TrackResult * clone  = new TrackResult(tempResult);
 TrackResult_[i]  = *clone;
于 2009-11-11T11:37:40.123 回答
1

我同意 Alex 的观点,使用 . 指针上的运算符也不是我推荐的样式,因此无论如何都应该更改其他点,因此不会阻止您简化您提到的代码。

于 2009-11-11T11:47:07.657 回答