【发布时间】:2012-12-19 20:56:14
【问题描述】:
我这样做对吗?我正在尝试委托一个 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))
{
}
【问题讨论】:
-
第二个是对的。它不会编译吗?
-
都编译。我只是想知道我是否需要初始化列表版本,或者第一个版本是否可以接受。
-
啊,我看到了你的困境。第一个创建了一个未命名的对象并且什么都不做,就像
int(5);那样。 -
实际上,第一个示例不应该编译,因为
Bitmap(BMP);声明了一个局部变量,名为BMP,类型为Bitmap。它不会创建临时的、未命名的对象。由于BMP已经存在(类型HBITMAP),它应该会导致多重定义错误。此外,Bitmap需要有一个空/默认/标准构造函数才能编译此行。 -
@Pixelchemist 你在说什么..
Bitmap(BMP);肯定声明了一个Bitmap类型的临时对象,BMP作为参数。这段代码实际上是在发帖时编译的。我很好奇,问它有什么作用。