可以像这样在堆栈上创建一个小像素图吗?

时间:2015-02-22 13:50:10

标签: c++ qt

我正在创建一个小型绘画应用程序,我想制作象棋般的背景以表示透明度。由于我是Qt和C ++的新手,我想知道在堆栈中创建一个小像素图是否正常(性能/内存)如下:

void GraphicsScene::drawBackground (QPainter *painter, const QRectF&)
{
    QPixmap pix(16, 16);
    QPainter p(&pix);
    p.fillRect(0, 0, 8, 8, Qt::white);
    p.fillRect(8, 0, 8, 8, Qt::gray);
    p.fillRect(0, 8, 8, 8, Qt::gray);
    p.fillRect(8, 8, 8, 8, Qt::white);
    QBrush b(pix);
    painter->fillRect(sceneRect(), b);
}

或者更好的是我创建一次刷子并将其存储在成员字段中?

2 个答案:

答案 0 :(得分:0)

如果它是常量且不可变的,我会将其创建为static const某处或static,使用std::call_once或类似的守卫进行懒惰初始化。

这可能是过早的优化,但我至少会将它重构为自由函数。如果您确实在将来看到性能问题,则可以使用memoization进行优化,而无需重构所有代码。

答案 1 :(得分:0)

由于您的代码似乎可读且正确,我建议您不要更改它。推迟优化,直到证明性能对于此特定功能很重要(例如,使用分析器)。

目前,你没有做任何特别无效的事情;堆栈上欢迎这种尺寸的物体。