AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi und C++ Speicherreservierung von Instanzen/Obijekten // (MS visual studio 2013)
Thema durchsuchen
Ansicht
Themen-Optionen

und C++ Speicherreservierung von Instanzen/Obijekten // (MS visual studio 2013)

Ein Thema von Bladefire · begonnen am 28. Jul 2014 · letzter Beitrag vom 1. Aug 2014
Antwort Antwort
Seite 3 von 3     123   
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#21

AW: und C++ Speicherreservierung von Instanzen/Obijekten // (MS visual studio 2013)

  Alt 31. Jul 2014, 15:10
Wenn TAuto eine Klasse wäre, hättest du Recht,
Darauf wollte ich auch erst hinweisen, aber
wenn TAuto keine Klasse wäre, würde myCar := TAuto.Create( 'BMW' ); nicht funktionieren
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73
Online

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
755 Beiträge
 
#22

AW: und C++ Speicherreservierung von Instanzen/Obijekten // (MS visual studio 2013)

  Alt 31. Jul 2014, 15:19
Zitat:
Darauf wollte ich auch erst hinweisen, aber
wenn TAuto keine Klasse wäre, würde myCar := TAuto.Create( 'BMW' ); nicht funktionieren
Was sollte da nicht funktionieren?
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#23

AW: und C++ Speicherreservierung von Instanzen/Obijekten // (MS visual studio 2013)

  Alt 31. Jul 2014, 15:34
In meinem Delphi hat ein Record keinen Konstruktor und auch keine Klassenfunktionen, die so tun könnten als ob.
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#24

AW: und C++ Speicherreservierung von Instanzen/Obijekten // (MS visual studio 2013)

  Alt 1. Aug 2014, 07:38
Mix doch bitte nicht New und FreeMem !
Musst mich ja nicht gleich so anschreien
Sorry. Dabei hab ich doch extra klein und mit Bitte geschrieben, damit's nicht so laut wirkt
- hast ja recht, und ich habe es in meinem Code auch geändert, merci
Danke

Code:
  (* hier wundere ich mich gerade, dass dein C++ Compiler sich nicht
   * darüber beschwert, dass es Klassenvariable->anzahl() heißen
   * muss... :/
   *)
Es mag C++-Compiler geben, die (ähnlich wie Delphi beim '@' in Methodenparametern) das Sternchen generös einfügen.
Und solche Automatismen führen dann dazu, dass Anfänger nicht verstehen, was genau nun vor sich geht...

Im Gegensatz zu C# hat Delphi dafür ein Pendant: object
Und (abgesehen davon, dass 'object' als veraltet gekennzeichnet wird) wie stellst Du dann echte Referenzvariablen dar:

Code:
{
  CKlasse obj(..);
  CKlasse* ptrObj = new CKlasse(..);
  CKlasse& refObj = *ptrObj;
}
?
Dass object in Delphi als veraltet gilt stört mich ehrlich gesagt überhaupt nicht. Ich bin FPC Entwickler und dort ist object nach wie vor first-class Citizen (und wird zum Beispiel im Compiler selbst noch hier und da verwendet).
Referenzvariablen lassen sich in der Tat nicht mit Delphi darstellen (außer als Parameter, wo du var und in FPC constref verwenden kannst). Andererseits sind Referenzvariablen nicht auf Klassen beschränkt und hier geht es ja um die Speicherverwaltung um Klassen und deren Äquivalenzen in Delphi. Und da ist nun mal object das was am nähesten rankommt...

Delphi-Quellcode:
procedure Test2;
var
  myCar : TAuto;
begin
  myCar := TAuto.Create( 'BMW' );
  Writeln( SizeOf( myCar ) ); // -> 100
end;
Werden die 100 Bytes dank der automatischen derefernzierung im heap gespeichert und im stack wird (vom compiler automatisch) ein zeiger darauf hinterlegt? (möglicherweise habe ich es falsch verstanden).
Da TAuto ein Record ist, liegt es auf dem Stack. Bei TAuto.Create wird (grob gesagt) auf einer temporären Variable vom Typ TAuto auf dem Stack gearbeitet, die an Create als versteckter Parameter übergeben wird und anschließend an myCar zugewiesen wird. Ein Record ist nur dann auf dem Heap, wenn du mit New oder GetMem und ner Zeigervariablen (type PAuto = ^TAuto; ) arbeitest.

In meinem Delphi hat ein Record keinen Konstruktor und auch keine Klassenfunktionen, die so tun könnten als ob.
Ab Delphi 2006 (glaub ich) und Free Pascal 2.6.0 (für (Klassen)Methoden) bzw. 2.7.1 (für Konstruktoren) funktioniert das.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 03:47 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