C++ 像这样在堆栈上创建一个小pixmap可以吗?

C++ 像这样在堆栈上创建一个小pixmap可以吗?,c++,qt,C++,Qt,我正在创建一个小的绘画应用程序,我想制作一个象棋一样的背景,以表示透明度。由于我是QT和C++的新手,我想知道在这个堆栈中创建一个小的PIXMAP是否可以(性能/内存): void GraphicsScene::drawBackground (QPainter *painter, const QRectF&) { QPixmap pix(16, 16); QPainter p(&pix); p.fillRect(0, 0, 8, 8, Qt::white)

我正在创建一个小的绘画应用程序,我想制作一个象棋一样的背景,以表示透明度。由于我是QT和C++的新手,我想知道在这个堆栈中创建一个小的PIXMAP是否可以(性能/内存):
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);
}

或者我最好创建一次画笔并将其存储在成员字段中?

如果它是一个常量且不可变,我会将其创建为某个地方的
静态常量,或者使用
std::call_once
或类似的保护延迟初始化的
static


这可能是过早的优化,但我至少会将其重构为一个自由函数。如果您将来确实看到性能问题,您可以使用memonization进行优化,而不必重构所有代码。

由于您的代码看起来可读且正确,我建议您不要更改它。推迟优化,直到证明性能对于该特定功能非常重要(例如,使用探查器)


目前,你没有做任何特别无效的事情;堆栈上欢迎使用此大小的对象。

取决于您需要调用
trackground()的频率。