如何从函数返回GDI :: Bitmap

时间:2013-10-24 15:27:35

标签: c++ bitmap gdi+

如何从函数返回位图? 此代码不起作用:编译器错误

 Gdiplus::Bitmap create()
 {
       Gdiplus::Bitmap bitmap(10,10,PixelFormat32bppRGB);

       // fill image
       return bitmap;
 }

我不想返回指针,因为它会产生内存泄漏的机会。 (或者如果有办法避免这种内存泄漏的可能性)

2 个答案:

答案 0 :(得分:3)

当你从一个函数返回一个对象时,编译器需要生成代码来复制或(在C ++ 11中)移动该对象。

Gdiplus::Bitmap没有可访问的拷贝构造函数(并且在C ++ 11之前,所以也没有移动)所以你不允许这样做。根据您的使用方式,您可以考虑使用类似std::unique_ptrstd::shared_ptr的内容。

或者,您可能希望在父级中创建Bitmap,只需传递一个指针或引用即可让您的函数根据需要填充它。

答案 1 :(得分:1)

如果你想要代码。这就是你将指针传回的方式。

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,所以如果没有默认构造函数那么那就不行了。