Warum sind alle IDE Komponenten Zeiger?
-
Hey,
eine ganz kurze Frage: Warum sind alle IDE-Komponenten in der Unit.h als Pointer definiert und nicht als Objekte?
-
Hallo
Weil die Forms die Instanzen der Komponenten dynamisch erstellen und besitzen (dynamisch freigeben). Mit Variablen anstelle von zeigern käme es da zu Konflikten. Außerdem können die VCL-Komponenten in C++ (im Unterschied zu Delpi) gar nicht auf direkt "auf dem Stack" erstellt werden.
bis bald
akari
-
Alle Objekte der VCL, die von
TObject
abgeleitet sind, können nicht auf dem Stack erzeugt werden. Das ist manchmal ziemlich ärgerlich, besonders wenn einem keine SmartPointer zur Verfügung stehen.
-
DocShoe schrieb:
besonders wenn einem keine SmartPointer zur Verfügung stehen.
Und wann ist das der Fall?
-
Gut, da müssen schon zwei Dinge zusammenfallen:
- man ist irgendwie an ein RAD Studio pre 2009 gekommen ist und kein Geld für 2009+ berappen möchte
- man Anfänger ist und die Installation von boost/poco nicht hinbekommtDa manche hier noch mit Turbo C++ anfangen möchte das nicht ausschließen.
-
DocShoe schrieb:
- man ist irgendwie an ein RAD Studio pre 2009 gekommen ist und kein Geld für 2009+ berappen möchte
Gab es in C++Builder 6 nicht auch schon den auto_ptr<>?
-
Danke! Da ich die XE3 hab, brauche ich mir da ja keinen Kopf zu machen oder?
-
Hallo
Doch, denn du must die Smart-Pointer schon manuell verwenden. Ansonsten hast du nur Roh-Zeiger mit den aus C bekannten Ownership-Problem.
bis bald
akari
-
audacia schrieb:
DocShoe schrieb:
- man ist irgendwie an ein RAD Studio pre 2009 gekommen ist und kein Geld für 2009+ berappen möchte
Gab es in C++Builder 6 nicht auch schon den auto_ptr<>?
Klar gab´s den, aber der ist ja fast genauso schlimm wie die manuelle Speicherverwaltung
-
DocShoe schrieb:
Klar gab´s den, aber der ist ja fast genauso schlimm wie die manuelle Speicherverwaltung
Welche verwendest Du denn dann, bzw empfiehlst Du?
-
Da ich mit dem CG2007 arbeiten muss stehen mir auch nur die SmartPointer aus boost 1.34_1 zur Verfügung, also
boost::shared_ptr
,boost::scoped_ptr
und Verwandte.
-
DocShoe schrieb:
Da ich mit dem CG2007 arbeiten muss stehen mir auch nur die SmartPointer aus boost 1.34_1 zur Verfügung, also
boost::shared_ptr
,boost::scoped_ptr
und Verwandte.Die funktionieren doch wunderbar
Im BCB6 funktioniert die Boost 1_33_1 auch ganz wunderbar.
Für die Smartpointer muss man die Boost auch nicht installieren
-
Ich wollte damit sagen, dass ich diesen neumodischen
unique_ptr
nicht habe, das CG2007 den neuen Sprachstandard nicht unterstützt. Außerdem bin ich davon ausgegangen, dass ein Neuling nicht weiß, dass man für diesmart_ptr
aus den boost Bibliotheken nur die Header inkludieren muss.
-
Ich weiß nicht was ihr gegen auto_ptr habt. Solange man den nicht kopiert funktioniert der ganz gut. Als Ersatz für den scoped_ptr ist er allemal geeignet.
Man sollte halt die Restriktionen kennen. Dann brauchts auch kein boost oder C++11.
-
Braunstein schrieb:
Ich weiß nicht was ihr gegen auto_ptr habt. Solange man den nicht kopiert funktioniert der ganz gut. Als Ersatz für den scoped_ptr ist er allemal geeignet.
Das frage ich mich auch schon den halben Thread lang.