unknown: Stack und Heap

Beitrag lesen

Hallo,

ich glaube Du hast Recht. Wir liegen gar nicht so weit auseinander.
Es bieten sich meiner Meinung nach zwei Betrachtungsweisen für

QLabel label;

  1. Der belegte Speicherplatz ist ein Objekt mit einem Namen, Typ und Speicherort. Also eine unveränderbare Instanz (im Sinne von Speicherort).

Ja, so ist es ja auch (in etwa). Der Speicherort ist fest. &label liefert über die gesammte Lebensdauer des Objektes den selben Wert. Die Instanz ist doch deswegen aber noch lange nicht unveränderbar. Dann wäre es eine Konstante und ich sehe dort kein const. Den Speicherbereich, welchen die Variable repräsentiert kann man verändern, einen oder mehrere veränderte Werte setzen.

Diesen Unterschied finde ich aber sehr wichtig! Schließlich kann man Objekte auf zwei Arten vergleichen:

  1. Verweisgleichheit
  2. Wertgleichheit

Das sind aber 2 Verschiedene Sache.
int a = 5;
int b = 5;
int* pA = &a;
int* pB = &b;
a == b vergleicht die Objekte a und b.
pA == pB vergleicht die Objekte pA und pB.
Einmal werden Objekte vom Typ int und das andere mal Objekte vom Typ int* verglichen.

Ebenso ist die Variable natürlich strenggenommen nur der benannte Speicherplatz für ein Objekt. Trotzdem halte ich es für eine zulässige sprachliche Vereinfachung zu sagen: Eine Variable *ist* ein Objekt (repräsentiert ein Objekt).

Eine Variable ist im Gegensatz zur Konstante ein veränderbares Objekt.

Genau da ist mein Problem. Für mich ist der Wert "2.2" quasi das "Objekt", das in der Variablen anteil gespeichert wird. Andersherum hieße es ja das du über die Variable anteil in das Objekt eingreifst und dessen Werte änderst.

Ja.

Bei so einem einfachen Beispiel kann man sich das ja noch irgendwie zurechtlegen aber was wird denn aus den Objekt-Methoden und geschützten Membern. Das wären ja dann nach dieser Denke Member der Variablen. Wenn ich das Objekt in dieser Hierarchie weglasse muss ich sagen, die Variable greift auf ihren Member DoSomething zu. Finde nur ich das unpassend?

Ich jedenfalls nicht.

Sicher kann man sich darauf einigen lokale Variablen und Objekte als ein und dasselbe zu behandeln, aber wenn man alle Blickwinkel und Möglichkeiten bei der Programmierung beachtet kommt man meiner Meinung nach nicht umhin saubere und eindeutige Formulierungen zu verwenden. Und das heißt für mich das eine Variable nicht das gleiche ist wie ein Objekt.

Ist ja auch nicht ganz das Gleiche. Eine Variable ist ein veränderbares Objekt.