Ответ 1
Вам нужно сделать второе. Делегирующие конструкторы работают только в списке инициализации конструктора, иначе вы просто создадите временные или сделаете другие ошибки, как вы упомянули.
Я делаю это правильно? Я пытаюсь делегировать конструктор класса С++, поскольку он в основном тот же код повторяется 3 раза. Я читал на С++ x11 и читал, что g++ 4.7.2 позволяет это, но я не уверен, что я это делаю право:
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?
}
ИЛИ мне нужно сделать:
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))
{
}
Вам нужно сделать второе. Делегирующие конструкторы работают только в списке инициализации конструктора, иначе вы просто создадите временные или сделаете другие ошибки, как вы упомянули.
Правильный синтаксис
struct Foo {
Foo(char x, int y) : _x{x}, _y(y) {}
Foo(int y) : Foo('a', y) {}
char _x;
int _y;
};
Ваш первый пример создает временное уничтожение сразу.
Второй пример, использующий список инициализаторов, является правильным. Первый пример - создание временного объекта.