使用相同类型的指针传递对象的地址

时间:2017-03-09 07:38:19

标签: c++ qt pointers

MainWindow::runButton_clicked()中,我实例化了GraphWindow类型的对象。我需要通过MainWindow中的另一个函数访问此对象,所以我尝试将对象的地址传递给相同类型的指针;

在MainWindow.h中

//Forward declaring Graphwindow
class GraphWindow;

class MainWindow : public QMainWindow
{
     //Member slots

     GraphWindow *graphPtr;
}

in MainWindow.cpp

MainWindow::on_runButton_clicked()
{
      GraphWindow graphObj;
      MainWindow::graphPtr = &graphObj;         

      //Other code
}

MainWindow::someFunction()
{
      MainWindow::graphPtr->exec();
}

我知道这不是最优雅的做事方式;我这样做的原因;

  • 我无法在GraphWindow定义中创建MainWindow的对象 因为class GraphWindow在那里被宣告
  • 我可以使用指针'GraphPtr to access all its member functions in MainWindow :: on_runButton_clicked()but I'm using this function called QTimer :: singleShot()in MainWindow :: on_runButton_clicked()which requires a object of type GraphWindow `

无论如何,我猜我通过存储在访问后者的指针广告中创建的对象的地址来做的方式是正确的。但不确定为什么我的程序崩溃了。任何建议表示赞赏

1 个答案:

答案 0 :(得分:1)

您在堆栈上存储局部变量的地址。当public boolean canShowErrorDialogs() { return mShowDialogs && !mSleeping && !mShuttingDown && mLockScreenShown != LOCK_SCREEN_SHOWN; } // ActivityManagerService 函数返回时,该on_runButton_clicked对象被销毁/解除分配。这称为悬空指针:访问该指针的任何代码稍后会调用未定义的行为。

一个解决方案:使用GraphWindow在堆上分配对象(不要忘记new它!):

delete