Eine Sache bzgl. Delphi-Compiler verstehe ich nicht, ist wahrscheinlich noch zu früh am Morgen:
Zitat:
Given that dynamic arrays are managed types, involving reference counting and associated helper function generation, casting array elements using the @ operator is disallowed as it leads to memory corruption. Performing a similar operation is still allowed using an explicit cast operation, under the developer responsibility.
Schätze mal, sowas geht nicht mehr:
Delphi-Quellcode:
var
x: PByte;
a: array of Byte; // Oder TArray<Byte>? Sagt man das jetzt so? Sehe ich immer öfter, aber keine Ahnung ob es dasselbe ist
begin
// ...
x := @a[0];
end;
Begründung: Das Array kann ja seine Länge ändern und dabei umallokiert werden, wodurch alle Zeiger auf Elemente ungültig werden.
Das sollte aber eigentlich jedem klar sein, und dynamische Arrays sind sicherlich auch nicht die einzige Stelle, wo ein Zeiger mal ungültig werden kann. Deshalb finde ich es auch eher fragwürdig.