在无效索引处访问TArray安全吗?
问题描述:
我想知道,如果下面的代码将可靠地复位nullptr
无任何并发症:在无效索引处访问TArray安全吗?
TArray<ASomeActor*> SomeActors;
ASomeActor* SomeActor = SomeActors[0];
return SomeActor;
答
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分配:
const ASomeActor* SomeActor = SomeActors.IsValidIndex(0) ? SomeActors[0] : nullptr;
哪个文件的一部分是混乱? –
那么在[虚幻引擎API参考](https://docs.unrealengine.com/latest/INT/API/Runtime/Core/Containers/TArray/index.html)中,它只是说:“数组括号运算符”。 – Shiro
从外观上看,它就像'std :: vector',它对'std :: vector'不安全。 – NathanOliver