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

Is it safe to access TArray at an invalid index?

我想知道以下代码是否 return nullptr 可靠且没有任何并发​​症:

TArray<ASomeActor*> SomeActors;

ASomeActor* SomeActor = SomeActors[0];

return SomeActor;

没有。根据documentation,这是不允许的:

Passing an invalid index — less than 0 or greater than or equal to Num() — will cause a runtime error.

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

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

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

尝试访问 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 ASomeActor* SomeActor = SomeActors.IsValidIndex(0) ? SomeActors[0] : nullptr;