2017-06-13 34 views
0

我想知道,如果下面的代碼將可靠地復位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

回答

2

號根據documentation,這是不允許的:

傳遞一個無效的指數 - 小於0或大於或等於Num() - 將導致運行時錯誤。

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

以上代碼原因運行時間錯誤,因爲索引大於或等於陣列的大小。

在使用索引訪問元素之前,請檢查具有數組大小的索引。索引應該小於數組的大小。

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;