Wenn ich das neue Schlüsselwort [] (oder new-operator) verwende, weist es Speicher zusammenhängend zu?
%Vor% Ich meine, gibt es eine Garantie, dass arr [0] und arr [1] eng beieinander liegen, und ich kann durch arr
Der C ++ Standard absolut garantiert dies.
arr[0]
bis bis arr[9]
sind zusammenhängend und es ist kein Padding zwischen Elementen erlaubt. Die Zeigerarithmetik ist in der zugewiesenen Region gültig. Sie können einen Zeiger auf arr + 10
setzen, aber nicht deneferenzieren.
Dies gilt für die Klasse any . Die Menge an Speicher, die pro Element zugewiesen wird, ist sizeof(Y)
, wobei Y
der Klassen- oder einfache alte Datentyp ist.
Ja, die Elemente befinden sich garantiert im konsekutiven Speicher (unabhängig von ihrem Typ). Wenn Sie new[]
aufrufen, erhalten Sie ein Array und die einzige Möglichkeit, auf die Elemente zuzugreifen, ist die Zeigerarithmetik.
Überlegen Sie, was arr[i]
eigentlich bedeutet:
ist wirklich nur eine Kurzform von
%Vor% Ein skurriler Nebeneffekt davon ist, dass für ein Array arr
und einen Index i
ist genau dasselbe wie arr[i]
(obwohl Sie dies nur schreiben würden, wenn Sie Ihre Mitarbeiter verwirren wollen).
Beachten Sie jedoch, dass []
überladen sein kann und in diesem Fall alles ausführen kann, was die Implementierung auswählt. Dennoch wird auch ein Array, das mit new[]
mit einem überladenen oeprator[]
belegt ist, seine Elemente im fortlaufenden Speicher haben.
Tags und Links c++ new-operator