2017-05-27 3 views

Antwort

4

Dieser Code sollte nie kompiliert haben, und Tokyo schließt das Loop-Loch. Das Problem bei dieser Besetzung ist, dass die Referenzzählung umgangen werden kann. Der Code, wie Sie ihn haben, leidet nicht an diesem Problem, aber wenn der Cast auf der linken Seite der Zuweisung geschrieben ist, dann wird keine Referenz genommen.

Pointer(LocalVar) := GlobalVar; 

diese herum, sind LocalVar einen Verweis auf die dynamischen Arrays zugeordnet sind, sondern die Referenzzählung inkrementiert wird nicht. Ich weiß es zu schätzen, dass Ihr Code nicht so geschrieben ist, aber ich glaube, dass dies der Grund ist, warum die Entwickler sich für die Änderung entschieden haben.

In jedem Fall ist es nicht notwendig für die Besetzung, wenn Sie kompatible Typen verwenden. Wechseln Sie zu TArray<Integer> und die Besetzung ist nicht erforderlich. Außerdem wird Ihr Code in der Lage sein, mit generischen Methoden zu interagieren.