C ++ - 是指向与1号动态数组相同的单个值的指针?

时间:2009-11-11 11:27:37

标签: c++ dynamic-arrays

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

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 个答案:

答案 0 :(得分:6)

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

分配动态数组时,会给出指向第一个元素的指针。如果数组大小为1,那么与分配对象的单个实例几乎无法区分。

如果您更改了特殊情况,则可以使用。到 - &gt; 但是我建议不要特殊套管它,只需使用trackResult_ [0] .velocity

答案 1 :(得分:3)

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

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

 TrackResult tempResult = result[i];
 TrackResult * clone  = new TrackResult(tempResult);
 TrackResult_[i]  = *clone;

答案 2 :(得分:3)

向量如何过于复杂?如果有的话,简化您的代码。

答案 3 :(得分:1)

我同意亚历克斯,使用。指针上的操作符也不是我推荐的样式,因此无论如何都应该更改其他点,因此不会阻止您简化您提到的代码段。