Heap / Stack - Объем переменных, входящих в QGraphicsItemGroup - PullRequest
0 голосов
/ 15 июня 2011

Если у меня есть элемент QGraphicsItem, который я хочу поместить в группу QGraphicsItemGroup, в цикле, например так:

for(int i =0; i < 2; i++)
{
    for(int j = 0; j < 2; j++)
    {
        QPixmap p(imwidth, imheight);
        p.fill(Qt::gray);
        QGraphicsPixmapItem *ipi = new QGraphicsPixmapItem(p);
        group->addToGroup(ipi);
    }
}

необходимо, чтобы этот элемент находился в куче, или я могу сделатьэто переменная стека и ожидается, что она все еще будет видна в группе, которая объявлена ​​вне цикла for?

Ответы [ 2 ]

3 голосов
/ 15 июня 2011

Метод addToGroup принимает указатель, так что вы не можете обойтись без его передачи.Он не копирует переданные объекты, просто сохраняет этот указатель.

Если вы дадите ему указатель на объекты, выделенные стеком, он рано или поздно взорвется, пытаясь получить доступ к памяти стека, которая (вероятно)с тех пор были перезаписаны, и даже если они (чудесным образом) не были перезаписаны, эти объекты все равно будут уничтожены, поэтому в любом случае они будут недействительными.

0 голосов
/ 15 июня 2011

Если вы объявите свой QGraphicsPixmapItem как переменную стека, он будет уничтожаться на каждой итерации цикла.Следовательно, использование его адреса в качестве указателя для метода QGraphicsItemGroup :: addToGroup, скорее всего, приведет к ошибке сегментации позже в программе.

...