2017-06-13 1 views
0

Ich möchte wissen, ob der folgende Code nullptr zuverlässig ohne Komplikationen zurückkehren würde:Ist es sicher, auf TArray mit einem ungültigen Index zuzugreifen?

TArray<ASomeActor*> SomeActors; 

ASomeActor* SomeActor = SomeActors[0]; 

return SomeActor; 
+0

Welchen Teil der Dokumentation ist verwirrend ? –

+0

Nun in der [Unreal Engine API-Referenz] (https://docs.unrealengine.com/latest/INT/API/Runtime/Core/Containers/TArray/index.html) es sagt nur: "Array Klammer Operator.". – Shiro

+0

Vom Aussehen her ist es wie 'std :: vector' und es ist nicht sicher für' std :: vector'. – NathanOliver

Antwort

2

Nr Laut documentation, dass nicht erlaubt ist:

Passing einen ungültigen Index - weniger als 0 oder größer als oder gleich Num() - verursacht einen Laufzeitfehler.

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

Above Code Ursache Laufzeitfehler, da der Index größer oder gleich der Größe des Arrays.

Bevor Sie mit dem Index auf das Element zugreifen, überprüfen Sie den Index mit der Größe des Arrays. Der Index sollte kleiner als die Größe des Arrays sein.

0

Es ist nicht sicher, um zu versuchen einen ungültigen Index eines tarray zuzugreifen, aber der Motor bietet eine bequeme Möglichkeit, den Index zu überprüfen, bevor Sie versuchen, es zu lesen:

TArray<ASomeActor*> SomeActors; 
if (SomeActors.IsValidIndex(0)) 
{ 
    ASomeActor* SomeActor = SomeActors[0]; 
    return SomeActor; 
} 
else 
{ 
    return nullptr; 
} 

sicherer sein würde. Es ist auch durchaus sinnvoll die Array Größe zu überprüfen, bevor Sie versuchen, es zu lesen:

If (SomeActors.Num() > 0) 
{ 
    return SomeActors[0]; 
} 

Sie einen ternären Operator verwenden können, wenn Sie eine konstante Zuordnung vornehmen müssen:

const ASomeActor* SomeActor = SomeActors.IsValidIndex(0) ? SomeActors[0] : nullptr; 
Verwandte Themen