我想知道,如果下面的代碼將可靠地復位nullptr
無任何併發症:在無效索引處訪問TArray安全嗎?
TArray<ASomeActor*> SomeActors;
ASomeActor* SomeActor = SomeActors[0];
return SomeActor;
我想知道,如果下面的代碼將可靠地復位nullptr
無任何併發症:在無效索引處訪問TArray安全嗎?
TArray<ASomeActor*> SomeActors;
ASomeActor* SomeActor = SomeActors[0];
return SomeActor;
號根據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;
哪個文件的一部分是混亂? –
那麼在[虛幻引擎API參考](https://docs.unrealengine.com/latest/INT/API/Runtime/Core/Containers/TArray/index.html)中,它只是說:「數組括號運算符」。 – Shiro
從外觀上看,它就像'std :: vector',它對'std :: vector'不安全。 – NathanOliver