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 hinbekommt

    Da 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 die smart_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.


Anmelden zum Antworten