C++ Heap/Stack—进入QGraphicsSiteMgroup的变量范围

C++ Heap/Stack—进入QGraphicsSiteMgroup的变量范围,c++,qt,qt4,qgraphicsview,C++,Qt,Qt4,Qgraphicsview,如果我有一个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 QGraphicsPixmap

如果我有一个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(int i=0;i<2;i++)
{
对于(int j=0;j<2;j++)
{
QPixmap p(imwidth,imheight);
p、 填充(Qt::灰色);
QGraphicsPixmapItem*ipi=新的QGraphicsPixmapItem(p);
组->添加组(ipi);
}
}
该项是否必须位于堆上,或者我是否可以将其设置为堆栈变量,并期望它在组中仍然可见,而该组在该for循环之外声明?

该方法使用指针,因此您不能不传递任何其他内容。它不复制传入的对象,只存储该指针

如果你给它一个指向堆栈分配对象的指针,它迟早会在试图访问堆栈内存时崩溃,而堆栈内存可能(很可能)从那时起就被覆盖了,即使它(奇迹般地)没有被覆盖,这些对象也会被破坏——因此它们在任何情况下都是无效的。

该方法使用一个指针,所以你不能通过传递任何其他信息来逃脱。它不复制传入的对象,只存储该指针


如果给它一个指向堆栈分配对象的指针,它迟早会在试图访问堆栈内存时崩溃,而堆栈内存(可能)从那时起就被覆盖了,即使它(奇迹般地)没有被覆盖,这些对象无论如何都会被销毁-因此它们在任何情况下都是无效的。

如果您将QGraphicsPixmapItem声明为堆栈变量,它将在循环的每次迭代中被销毁。因此,将其地址用作QGraphicsSiteMgroup::addToGroup方法的指针,很可能会导致程序中出现分段错误。

如果将QGraphicsPixmapItem声明为堆栈变量,则它将在循环的每次迭代中被销毁。因此,将其地址用作QGraphicsSiteMgroup::addToGroup方法的指针很可能会导致程序中出现分段错误