在无效索引处访问TArray是否安全?

时间:2017-06-13 17:26:00

标签: c++ arrays unreal-engine4 nullptr

我想知道以下代码是否可以可靠地返回nullptr而没有任何复杂情况:

TArray<ASomeActor*> SomeActors;

ASomeActor* SomeActor = SomeActors[0];

return SomeActor;

3 个答案:

答案 0 :(得分:2)

没有。根据{{​​3}},这是不允许的:

  

传递无效索引 - 小于0或大于或等于Num() - 将导致运行时错误。

答案 1 :(得分:0)

TArray<ASomeActor*> SomeActors;
ASomeActor* SomeActor = SomeActors[0];
return SomeActor;

上面的代码导致运行时错误,因为索引大于或等于数组的大小。

在使用索引访问元素之前,请检查具有数组大小的索引。索引应小于数组的大小。

答案 2 :(得分:0)

尝试访问TArray的无效索引是不安全的,但是在尝试读取索引之前,引擎提供了检查索引的便捷方法:

TArray<ASomeActor*> SomeActors;
if (SomeActors.IsValidIndex(0))
{
    ASomeActor* SomeActor = SomeActors[0];
    return SomeActor;
}
else
{
    return nullptr;
}

会更安全。在尝试阅读之前检查数组的大小也是完全合理的:

If (SomeActors.Num() > 0)
{
    return SomeActors[0];
}

如果需要进行const赋值,可以使用三元运算符:

const ASomeActor* SomeActor = SomeActors.IsValidIndex(0) ? SomeActors[0] : nullptr;