Konstruktor von Objektelementen
-
Naja, entweder er benutzt Zeiger oder geht über eine temporäre Variable, wie er es zuvor gemacht hat. Da würde ich die Zeiger-Version noch bevorzugen.
Oder aber er übergibt als Parameter einen entsprechenden Typ und initialisiert seine Variable damit:class foo { InfoDialog info; public: foo(InfoDialog infoDlg) : info(infoDlg) {} }; int main() { // HWND irgendwo erstellen InfoDialog info(hwnd, IDD_INFO); foo(info); }Somit hätte er dann auch das Handle initialisiert, welches seine InfoStruktur benötigt.
-
Mis2com schrieb:
Hi,
also bei der Windowsprogrammierung geht es ja eigentlich immer um irgendwelche HWND-Strukturen oder so und da konstruiert man ja nichts durch den ctor sondern setzt einfach alle Werte.
Na ja, davon abgesehen kannst du auch zur Laufzeit ein Objekt erstellen, wenn du mit Zeigern arbeitest.class Bla { Bla(int a, b) {} }; class Blup { private: Bla* a; public: Blup(int c); ~Blup(); }; Blup::Blup(int c) { // mache irgendwas a = new Bla(x, y); } Blup::~Blup() { delete a; }Das macht man allgemein bei dynamisch bzw. zur Laufzeit erstellten Objekten so... Zu beachten ist dann aber, dass du zu einem new natürlich immer ein delete brauchst.
Ob in deinem Fall Zeiger nötig sind, weiß ich aber gerade nicht zu beurteilen.MfG Eisflamme
dann nehmen wir aber am besten eine scoped_ptr, das hat nur vorteile:
- scoped_ptr kann nicht kopiert werden, also kann der compiler auch für unsere klasse keinen copy-ctor und copy-zuweisungs op definieren. wenn wir diese wollen, müssten wir sie sowieso selbst definiern.
- den destruktor brauchen wir nicht mehr
- falls wir noch so ein member brauchen, ist das ganze gleich exceptionsicher, ohne etra noch try-catch kaskaden zu benötigenalso:
class Blup { private: boost::scoped_ptr<Bla> a; public: Blup(int c); }; Blup::Blup(int c) : a() // ctor ist explicit { a.reset(new Bla(x,y)); // mache irgendwas }für die eigentliche initialisierungsproblematik sei noch auf das hier http://www.boost.org/libs/utility/base_from_member.html verwiesen. das trifft das problem ja wohl exakt.