当我们应该在 C++ 中使用 new 键时,我很困惑?

时间:2021-08-01 15:58:59

标签: c++ qt

我是 C++ 新手,我正在尝试使用 QAction 和 QMenu 在 Qt 中创建简单的菜单栏,当我使用 new 创建 QAction 对象时,它可以工作并且我在菜单栏中看到该项目,但是当我尝试创建一个对象时不使用新键虽然它运行没有问题,该项目没有出现在菜单栏中。我只想知道为什么会这样。

  QMenu* _fileMenu=menuBar()->addMenu("&File");
    QAction* _openAction=new QAction("&Open",this);
    QAction* _saveAction=new QAction("&Save",this);
    QAction helpAction("&Help",this);
    QAction* helpPointer=&helpAction;
   
    _fileMenu->addAction(_openAction);//works fine
    _fileMenu->addAction(_saveAction);//works fine
    _fileMenu->addAction(helpPointer);//Doesnt show any changes

1 个答案:

答案 0 :(得分:0)

因为您在堆栈上创建了 helpAction,并且在您离开创建它的函数的作用域后它会立即被销毁。因此,它通过 helpPointer 临时添加到菜单中,但是,就在函数结束时,它被销毁并因此从菜单中删除。所以函数的最终结果是 helpAction 在菜单中不存在,因为当函数完成时它根本不存在。

如果你想把它放在菜单中,你必须动态分配它。这通常通过关键字 new 完成。