如何从函数返回位图?此代码不起作用:编译器错误
Gdiplus::Bitmap create()
{
Gdiplus::Bitmap bitmap(10,10,PixelFormat32bppRGB);
// fill image
return bitmap;
}
我不想返回一个指针,因为它会产生内存泄漏的机会。(或者如果有办法避免这种内存泄漏的机会)
当您从函数返回对象时,编译器需要生成代码来复制或(在 C++11 中)移动该对象。
Gdiplus::Bitmap
没有可访问的复制构造函数(并且早于 C++11,所以也没有移动),所以你不能这样做。根据您使用它的方式,您可能会考虑使用类似std::unique_ptr
或可能的东西std::shared_ptr
。
或者,您可能希望Bitmap
在父级中创建 ,并简单地传递一个指针或对它的引用,让您的函数根据需要填充它。
如果你想要代码。这就是您将指针传回的方式。
Gdiplus::Bitmap* create()
{
Gdiplus::Bitmap* bitmap = new Gdiplus::Bitmap(10,10,PixelFormat32bppRGB);
// fill image
return bitmap;
}
void create(Gdiplus::Bitmap& bitmap)
{
bitmap = *(new Gdiplus::Bitmap(10,10,PixelFormat32bppRGB));
}
上下文将类似于
int main()
{
Gdiplus::Bitmap bitmap; //ONLY WORKS IF IT HAS DEFAULT CONSTRUCTOR
create(bitmap);
}
我不熟悉 Gdiplus,所以如果没有默认构造函数,那将无法正常工作。