Zeiger im allgemeinen Typsystem

Aktualisiert: November 2007

Zeiger stellen eine spezielle Art von Variablen dar. Die Laufzeit unterstützt drei Zeigertypen: verwaltete Zeiger, nicht verwaltete Zeiger und nicht verwaltete Funktionszeiger.

Ein verwalteter Zeiger, auch als Handle für ein Objekt auf dem verwalteten Heap bezeichnet, ist ein neuer Typ von Zeiger, der für verwaltete Anwendungen verfügbar ist. Verwaltete Zeiger sind Verweise auf verwaltete Speicherblöcke aus dem Heap der Common Language Runtime. Auf diesem Heap wird eine automatische Garbage Collection durchgeführt. Verwaltete Zeiger werden für Methodenargumente generiert, die als Verweis übergeben werden. Einige Programmiersprachen bieten andere Möglichkeiten zum Generieren verwalteter Zeiger. Nur verwaltete Zeiger sind CLS-kompatibel.

Hinweis:

In Visual C++ 2002 und Visual C++ 2003 wurde __gc * zum Deklarieren eines verwalteten Zeigers verwendet. Diese Zeichenfolge wurde in Visual C++ 2005 durch ein ^ ersetzt, z. B. ArrayList^ al = gcnew ArrayList();.

Nicht verwaltete Zeiger sind die herkömmlichen C++-Zeiger auf nicht verwaltete Speicherblöcke aus dem C++-Standardheap. Da nicht verwaltete Zeiger kein Bestandteil der Common Language Specification (CLS) sind, wird von Ihrer Sprache u. U. keine Syntax zur Definition bzw. für den Zugriff auf diese Typen bereitgestellt. Informationen zur Unterstützung von nicht verwalteten Zeigern finden Sie in der Dokumentation zu Ihrer Programmiersprache.

Ein nicht verwalteter Funktionszeiger ist gleichzeitig ein herkömmlicher C++-Zeiger, der sich auf die Adresse einer Funktion bezieht. Als verwaltete Alternative zu nicht verwalteten Funktionszeigern bietet die CLS Delegaten.

Ein Zeigertyp muss nicht explizit definiert werden. Sämtliche Informationen, die zur Bestimmung des Zeigertyps benötigt werden, sind bereits bei der Deklaration des Zeigers vorhanden.

Obwohl Zeigertypen Verweistypen darstellen, ist der Wert eines Zeigertyps kein Objekt, sodass der exakte Typ nicht anhand dieses Werts ermittelt werden kann.

Das allgemeine Typsystem stellt zwei typsichere Operationen für Zeigertypen bereit: Das Laden eines Werts von und das Schreiben eines Werts an dem Speicherort, auf den vom Zeiger verwiesen wird. Diese typsicheren Operationen sind CLS-kompatibel.

Außerdem stellt das allgemeine Typsystem drei bytebasierte, arithmetische Adressoperationen für Zeigertypen zur Verfügung: Addieren ganzer Zahlen zu und Subtrahieren ganzer Zahlen von Zeigern sowie Subtrahieren eines Zeigers von einem anderen Zeiger. Durch die Ergebnisse der beiden ersten arithmetischen Operationen wird ein Wert zurückgegeben, der über denselben Typ wie der ursprüngliche Zeiger verfügt. Diese bytebasierten Operationen sind nicht CLS-kompatibel.

Siehe auch

Konzepte

CLS (Common Language Specification)

Schreiben von CLS-kompatiblem Code

Weitere Ressourcen

Allgemeines Typsystem