如何在qt中检查未初始化的对象

时间:2017-10-22 15:48:24

标签: c++ qt qgraphicsitem

我有一个图形对象myline。他是从MyLineItem类生成的,它是QGraphicsLineItem的子类。

在首次初始化之前,我必须检查myline是否已初始化。 (如果不是......做某事 - 初始化它)。但没有任何东西可以形成我你知道问题出在哪里吗?

在H文件中,我有两个构造函数:

explicit MyLineItem(QGraphicsLineItem *parent = 0);
MyLineItem(const QLineF &line, QGraphicsItem *parent = 0)

在我的主程序中是这样的:

MyLineItem *myline;

if (myline != 0)
{
    QLineF newLine = QLineF(myline->line().p1(), mouseEvent->scenePos());
    myline->setLine(newLine);
    update();
}
else
{
     myline = new MyLineItem(QLineF(mouseEvent->scenePos(),mouseEvent->scenePos()));
}

问题是,该程序仍然只进入{}。但是在第一次他们必须进入代码的其他部分。

我测试了if(myline != NULL), if(myline != 0), if(myline != nullptr) stil。如果零件程序崩溃了。 Ofcourse ....因为对象myline没有初始化,因为它们更新进入else {} part。

1 个答案:

答案 0 :(得分:0)

  1. 现代C ++实际上可以摆脱原始指针的使用,特别是Qt Framework提供了托管指针QScopedPointer,QSharedPointer ...... 和STL图书馆

  2. 像你的MyLineItem * myline这样的非初始化的东西很容易被捕获,编译器可以作为检测它们的选项

  3. 至少使用visual studio,您可以在调试和发布模式下使用未初始化的变量或指针获得不同的结果。在Debug中它通常是Zero'ed而不是Release中的情况,这有时可以解释为什么代码可以在Debug中工作而不在Release