Delegate Konstruktor C ++
Mache ich das richtig? Ich versuche zu delegieren, eine C++ - Klasse Konstruktor, da es im Grunde den gleichen code zu wiederholen 3 mal.. ich lese-bis auf C++, x11 und gelesen, dass g++ 4.7.2 erlaubt, aber ich bin mir nicht sicher, ob ich alles richtig machen:
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))
{
}
Kommentar zu dem Problem
Die zweite ist die richtige. Tut Sie es nicht kompilieren?
Beide kompilieren. Ich Frage mich nur, wenn ich das benötigte Initialisierungs-Liste version oder wenn das erste ist akzeptabel.
Ah, ich sehe dein dilemma. Das erste erstellt ein Unbenanntes Objekt und hat nichts mit es, ähnlich wie bei
int(5);
würde. Tatsächlich, das erste Beispiel sollte nicht kompiliert werden, da
" Bitmap(BMP);
deklariert eine lokale variable mit dem Namen BMP
vom Typ Bitmap
. Es bedeutet nicht, erstellen Sie eine temporäre, Unbenannte Objekte. Es sollte sich in einer definition mehrere Fehler da BMP
existiert bereits (Typ HBITMAP
). Außerdem, Bitmap
ist erforderlich, um eine leere/Standard/standard Konstruktor für diese Linie werden kompilierbar. @Pixelchemist Was redest du..
Bitmap(BMP);
definitiv erklärt ein temporäres Objekt vom Typ Bitmap
mit BMP
als parameter. Dieser code wurde tatsächlich kompiliert, an die Zeit der post. Ich war neugierig und fragte, was es tut. InformationsquelleAutor der Frage Brandon | 2012-12-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie tun die zweite. Delegierende Konstruktoren nur in der Konstruktor-Initialisierung-Liste, sonst werden Sie einfach erstellen Sie eine temporäre oder machen andere Fehler, wie du Sie erwähnt hast.
InformationsquelleAutor der Antwort Pubby
Die korrekte syntax ist
Ihrem ersten Beispiel wird eine temporäre, die ist zerstört sofort.
InformationsquelleAutor der Antwort log0
Das zweite Beispiel für die Verwendung der Initialisierungsliste ist die richtige .
Erstes Beispiel ist, um am Ende erstellen Sie ein temporäres Objekt.
InformationsquelleAutor der Antwort rahul