Подтвердить что ты не робот

Делегировать конструктор С++

Я делаю это правильно? Я пытаюсь делегировать конструктор класса С++, поскольку он в основном тот же код повторяется 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))
{
}
4b9b3361

Ответ 1

Вам нужно сделать второе. Делегирующие конструкторы работают только в списке инициализации конструктора, иначе вы просто создадите временные или сделаете другие ошибки, как вы упомянули.

Ответ 2

Правильный синтаксис

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

  char _x;
  int _y;
};

Ваш первый пример создает временное уничтожение сразу.

Ответ 3

Второй пример, использующий список инициализаторов, является правильным. Первый пример - создание временного объекта.