AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Objekt kopieren, ohne unnötige methoden/felder usw.
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt kopieren, ohne unnötige methoden/felder usw.

Ein Thema von Pseudemys Nelsoni · begonnen am 11. Dez 2004 · letzter Beitrag vom 12. Dez 2004
 
tommie-lie
(Gast)

n/a Beiträge
 
#6

Re: Objekt kopieren, ohne unnötige methoden/felder usw.

  Alt 12. Dez 2004, 12:01
Christian, Robert, ich glaube ihr redet ein wenig an Marios Problem vorbei... Es geht nicht darum, daß er überhaupt auf var2 zugreifen kann, sondern daß er das nach einem Typecast kann. Und da ist auch der Knackpunkt, "hi" wird nicht kopiert, sondern ist zufällig noch im Speicher:

blubb1 := blah1.Create; Es wird eine Instanz von blah1 erzeugt, ein Pointer darauf ist in blubb1 (wird später aber wieder verworfen, ohne freuzugeben).

blubb2 := blah2.Create; Es wird eine Instanz von blah2 erzeugt, ein Pointer darauf ist in blubb2.

blubb2.var2 := 'hi'; Der Pointer auf das Objekt wird dereferenziert und an die Stelle von "var2" wird "hi" geschrieben (daß der Longstring jetzt wiederum ein Pointer ist, vernachlässigen wir mal, es würde nur noch mehr verwirren ).

blubb1 := blubb2; Der Pointer, der auf die zweite Instanz (mit dem "hi" in "var2") zeigt, wird blubb1 zugewiesen.

showmessage((blubb1 as blah2).var2); // zeigt immernoch 'hi' Der Pointer wird dereferenziert und gecastet, wodruch "var2" als Offset zum Speicherbereich wieder zur Verfügung steht. Da der Speicherbereich mit dem von "blubb2" referenzierten identisch ist, ist natürlich auch der Inhalt identisch, und im Offset von "var2" gibt's ein "hi".

Delphi-Quellcode:
blubb1.Free;
blubb2.Free;
Das würde ich nach diesen Operationen so nicht machen, kann gut gehen, kann aber auch verdammt ins Auge gehen

Die Variable "var2" wird nicht in "blubb1" mitkopiert, sondern der Zeiger auf den Speicherbereich der blah2-Instanz wird einfach in "blubb1" geschrieben. Durch den Typecast erlaubt dir der Compiler den Zugriff auf das Offset von "var2", und weil du da vorher "hi" reingeschrieben hast und es zwischenzeitlich niemand da wieder weggenommen hat, ist es natürlich immer noch da



Edit: Nachdem ich gemerkt habe, daß es nicht gut aussah, doch noch Delphi-Tags hinzugefügt *g*
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz