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

问题描述:

我想知道,如果下面的代码将可靠地复位nullptr无任何并发症:在无效索引处访问TArray安全吗?

TArray<ASomeActor*> SomeActors; 

ASomeActor* SomeActor = SomeActors[0]; 

return SomeActor; 
+0

哪个文件的一部分是混乱? –

+0

那么在[虚幻引擎API参考](https://docs.unrealengine.com/latest/INT/API/Runtime/Core/Containers/TArray/index.html)中,它只是说:“数组括号运算符”。 – Shiro

+0

从外观上看,它就像'std :: vector',它对'std :: vector'不安全。 – NathanOliver

号根据documentation,这是不允许的:

传递一个无效的指数 - 小于0或大于或等于Num() - 将导致运行时错误。

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;