Delegate Konstruktor C ++

Mache ich das richtig? Ich versuche, einen C ++ – classnkonstruktor zu delegieren, da es im Grunde den gleichen Code ist, der sich dreimal wiederholt. Ich las auf C ++ x11 und las, dass g ++ 4.7.2 dies erlaubt, aber ich bin mir nicht sicher, ob ich es tue Recht:

Bitmap::Bitmap(HBITMAP Bmp) { //Construct some bitmap stuff.. } Bitmap::Bitmap(WORD ResourceID) { HBITMAP BMP = (HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(ResourceID), IMAGE_BITMAP, 0, 0, LR_SHARED); Bitmap(BMP); //Delegates to the above constructor? Or does this create a temporary? } 

ODER muss ich tun:

 Bitmap::Bitmap(HBITMAP Bmp) { //Construct some bitmap stuff.. } Bitmap::Bitmap(WORD ResourceID) : Bitmap((HBITMAP)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(ResourceID), IMAGE_BITMAP, 0, 0, LR_SHARED)) { } 

Sie müssen die zweite machen. Das Delegieren von Konstruktoren funktioniert nur in der Initialisierungsliste des Konstruktors, andernfalls erstellen Sie nur ein temporäres oder führen andere Fehler aus, wie Sie bereits erwähnt haben.

Die korrekte Syntax ist

 struct Foo { Foo(char x, int y) : _x{x}, _y(y) {} Foo(int y) : Foo('a', y) {} char _x; int _y; }; 

Ihr erstes Beispiel erstellt ein temporäres Objekt, das sofort zerstört wird.

Das zweite Beispiel, das die Initialisierungsliste verwendet, ist das richtige. Das erste Beispiel wird am Ende ein temporäres Objekt erstellen.