委托构造函数C ++
我做对了吗? 我试图委托一个C ++类的构造函数,因为它基本上是相同的代码重复3次..我读了C + + 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)) { }
你需要做第二个。 委托构造函数只能在构造函数的初始化列表中工作,否则你只会创build一个临时的或者像你提到的那样做其他的错误。
正确的语法是
struct Foo { Foo(char x, int y) : _x{x}, _y(y) {} Foo(int y) : Foo('a', y) {} char _x; int _y; };
你的第一个例子创build一个临时的,被立即销毁。
第二个使用初始化列表的例子是正确的。 第一个例子将最终创build一个临时对象。