2009-03-27 24 views
3

Ich war neugierig, was ist der Umfang der Variablen innerhalb eines Klassenkonstruktors deklariert, die nicht Datenmitglieder dieser Klasse sind?Welchen Umfang haben Variablen in einem Klassenkonstruktor?

Wenn ein Konstruktor beispielsweise ein iterierendes int i benötigt, wird diese Variable nach Abschluss des Konstruktors zerstört oder ist sie dann global für das Programm?

Danke!

Antwort

11

In diesem Sinne ist ein Konstruktor wie jede andere Funktion - jede Variable, die im Inneren deklariert wird, hat übliche Bereichsbeschränkungen, und sie alle gehen sicher außer Reichweite und werden zerstört, sobald der Konstruktor fertig ist.

+0

Danke! Ich war mir nur nicht sicher, ob der Konstruktor als normale Funktion betrachtet wurde. –

+1

Nein ganz genau. Objekte, die mit einer statischen Speicherdauer definiert sind, gehen nicht in den Geltungsbereich, werden aber * nicht * zerstört, sobald der Konstruktor fertig ist. – AnT

+0

@AnT Wie unterscheidet sich das von der Statik in anderen Funktionen? – Caleth

3

Variablen, die im Klassenkonstruktor deklariert sind, sind innerhalb des Bereichs des Klassenkonstruktors verfügbar und nirgendwo höher.

6

Wie jede andere Funktion, wenn es eine lokale Variable ist, wird sie am Ende der Funktion "zerstört". Lokaler Umfang

2

Lokale Variablen werden unabhängig von der Funktion zerstört, wenn sie den Gültigkeitsbereich verlassen. Sie werden nicht "global".

1

Der Bereich kann entweder statisch (lexikalisch) oder dynamisch sein. Die meisten Sprachen verwenden einen lexikalischen Geltungsbereich, was bedeutet, dass der Umfang durch den Text des Programms bestimmt wird (z. B. "innerhalb der Reihe von geschweiften Klammern, wo es definiert ist"), nicht durch die Bedeutung dessen, was Sie geschrieben haben.

http://en.wikipedia.org/wiki/Scope_(programming)

5

Wie kommt es häufig vor, könnten Sie die Vorstellungen von Umfang und Lebensdauer werden Mischen, so dass ich beide adressieren.

Der Umfang eines Namens in einem Konstruktor deklariert der gleiche wie der Umfang von jedem lokalen Name ist (die Tatsache, dass es ein Konstruktor haupt keinen Unterschied macht): der Umfang des Namens zu dem Ende erstreckt des Blocks, in dem der Name deklariert ist (und es kann "Löcher" haben, wenn der Name ausgeblendet ist durch eine Erklärung eines sogar "mehr lokalen" entify mit dem gleichen Namen).

Die Lebensdauer von am Objekt in einem Konstruktor definiert durch die gleichen Regeln wie für die gesamte Lebensdauer eines lokal definierten Objekts bestimmt wird (die Tatsache, dass es ein Konstruktor keinen Unterschied macht, was auch immer): ein Objekt mit automatischer Speicherdauer wird am Ende seines Gültigkeitsbereichs zerstört, während ein Objekt mit statischer Speicherdauer für immer lebt.