Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Objektorientierte Frage (https://www.delphipraxis.net/167955-objektorientierte-frage.html)

arisen89 27. Apr 2012 08:01

Objektorientierte Frage
 
Hallo zusammen,


kann jemand mir erklären was hier im Sinne von Pointer passiert ?

Code:
..
Objekt1 : TTyp1;
Objekt2 : TTyp1;
Objekt3 : TTyp1;
..

Objekt1 := TTyp1.Create(Self);
Objekt2 := Objekt1; // kopieren oder zeiger ? 

Objekt1.Free; // Mit Pointer verwaltet ? habe ich den Inhalt verloren ? 
Objekt2 := Objekt3; // Objekt3 hat nichts drinnen, habe ich den Inhalt von Objekt2 verloren ? und zeigt es
                       auf Objekt3 ? oder wurde alles 1:1 kopiert ?
ich bedanke mich !!

LG

Bummi 27. Apr 2012 08:06

AW: Objektorientierte Frage
 
Alles nur Zeiger .... die dann gegf. ins Nirwana zeigen.

Stevie 27. Apr 2012 08:09

AW: Objektorientierte Frage
 
Objekt Referenzen sind nichts anderes als typisierte Zeiger.

Delphi-Quellcode:
Objekt2 := Objekt1;
schreibt den Zeiger auf das zuvor erzeugte Objekt auf Objekt2.
Delphi-Quellcode:
Objekt1.Free;
gibt das zuvor erzeugte Objekt frei. Objekt1 und Objekt2 zeigen nun auf ungültigen Speicher.
Delphi-Quellcode:
Objekt2 := Objekt3;
schreibt wie bei der anderen Zuweisung den Inhalt von Objekt3 in Objekt2. Diese beinhalten aber durch das Freigeben des Objekts nur einen Zeiger auf ungültigen Speicher (du bekommst eine Zugriffsverletzung wenn du irgendwas mit Objekt1, 2 oder 3 anstellst.

Neutral General 27. Apr 2012 08:11

AW: Objektorientierte Frage
 
Hallo,

Delphi-Quellcode:
Objekt1 : TTyp1;
Objekt2 : TTyp1;
Objekt3 : TTyp1;


Objekt1 := TTyp1.Create(Self); // 1)
Objekt2 := Objekt1;           // 2)
 
Objekt1.Free;                 // 3)
Objekt2 := Objekt3;           // 4
1) Ein Objekt vom Typ "TTyp1" wird erstellt. die Variable Objekt1 zeigt auf dieses Objekt (Pointer)
2) Jetzt zeigt auch die Variable Objekt2 (Pointer) auf das eben erstellte Objekt (NICHT kopiert)
3) Das Objekt wird im Speicher zerstört. Objekt1 und Objekt2 zeigen auf eine ungültige Speicherstelle.
4) Da Objekt3 niemals initialisiert wurde zeigt Objekt3 IRGENDWOHIN. Mit großer Sicherheit auf eine ungültige Speicherstelle. Das tut der Zeiger Objekt2 danach auch. (sinnlos)

mkinzler 27. Apr 2012 08:13

AW: Objektorientierte Frage
 
(Klassen)Objekte sind Referenzen (Zeiger).
Die Zuweisung Objekt2 := Objekt1; kopiert nichts, sondern bewirkt nur, dass Objekt1 und Objekt2 die selbe Instanz referenzieren.
Die Freigabe des Objekts bewirken, dass beide Instanzvariablen in Nirwana zeigen.
Der letze Befehl lenkt das Objekt2 von Nirwana 1 ins Nirwana 2 um.

arisen89 27. Apr 2012 08:42

AW: Objektorientierte Frage
 
@bummi @Stevie @Neutral General

vielen Dank Für die gleichbedeutenden Erklärungstexte !

Mein Ziel ist mehr oder weniger die Abschnitte in den nächsten Projekten effiziener fertig zu programmieren

LG aus Berlin,

snox


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz