54 votes

Constructeur délégué C ++

Suis-je en train de faire ça? J'essaie de déléguer un constructeur de classe C ++ car c'est fondamentalement le même code qui se répète 3 fois .. J'ai lu sur C ++ x11 et lu que g ++ 4.7.2 le permet mais je ne sais pas si je le fais droite:

 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?
}
 

OU dois-je faire:

 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))
{
}
 

44voto

log0 Points 6367

La syntaxe correcte est

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

Votre premier exemple crée un temporaire qui est immédiatement détruit.

44voto

Pubby Points 29386

Vous devez faire la seconde. La délégation des constructeurs ne fonctionne que dans la liste d'initialisation du constructeur, sinon vous allez simplement créer un temporaire ou faire d'autres erreurs comme vous l'avez mentionné.

1voto

rahul Points 36

Le deuxième exemple utilisant la liste d'initialisation est le bon. Le premier exemple va finir par créer un objet temporaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X