【发布时间】:2014-06-02 13:52:58
【问题描述】:
我正在尝试为手机开发 Qt 应用程序,因此我决定不使用任何标准库(因为我担心某些平台可能还不支持)。所以,我不得不重新实现智能指针包装器(当然是使用标准草案),而不需要任何标准头文件。在Qt中,有一些Widget,比如QMenu和QToolBar,在需要的时候需要创建——就是这样创建的
QMenu *mainMenu = new QMenu;
QToolBar *toolBar = new QToolBar;
//To add a new menu bar or ToolBar, we do
mainMenu = menuBar()->addMenu("&File");
//add all the elements to the first menuBar
mainMenu->addAction(QAction { });
mainMenu = menuBar()->addMenu("&Edit"); //for second Menu
//same goes for QToolBar
我实现 unique_ptr“观察者”的唯一方法是使用 get()、operator* 和 operator-> 成员函数来访问底层成员。显而易见的是 MenuBar()->addNew() 返回一个指向另一个 mainMenu 的新指针。 现在我的问题是,旧指针会发生什么?是什么跟踪他们?如何使用智能指针来替换这些裸指针,还是我必须坚持严格使用裸指针的“好旧方法”?
注意:所有文件都可以找到here
【问题讨论】:
-
我不太确定,这就是为什么我说“可能”,这说明了我的不确定性。我不想在这里暗示什么
-
请注意
QWidget对象几乎总是有父对象。因此,您不能对它们使用“强”智能指针。QPointer是你应该 (Qt5) 用作对任何带有父级的QObject的弱引用的弱智能指针,并且只有在你真正需要它的时候。
标签: c++ qt c++11 smart-pointers qtcore