C++ Qt中的智能指针内存管理器
我正试图为手机开发一个Qt应用程序,所以我决定不使用任何标准库(因为我担心某些平台可能还不受支持)。因此,我不得不在没有任何标准头的情况下重新实现智能指针包装器(当然,使用标准草稿)。在Qt中,有一些小部件,比如QMenu和QToolBar,当需要创建它们时,它们就是这样创建的C++ Qt中的智能指针内存管理器,c++,qt,c++11,smart-pointers,qtcore,C++,Qt,C++11,Smart Pointers,Qtcore,我正试图为手机开发一个Qt应用程序,所以我决定不使用任何标准库(因为我担心某些平台可能还不受支持)。因此,我不得不在没有任何标准头的情况下重新实现智能指针包装器(当然,使用标准草稿)。在Qt中,有一些小部件,比如QMenu和QToolBar,当需要创建它们时,它们就是这样创建的 QMenu *mainMenu = new QMenu; QToolBar *toolBar = new QToolBar; //To add a new menu bar or ToolBar, we do mainM
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
我实现惟一的_ptr“observer”的唯一方法是使用get()、operator*和operator->member函数来访问底层成员。很明显,MenuBar()->addNew()返回指向另一个主菜单的新指针。
现在我的问题是,这个旧指针会发生什么变化?是什么跟踪他们的?如何使用智能指针来代替这些裸指针,或者我必须坚持严格使用裸指针的“好的老方法”
注意:可以找到所有文件
因为我担心某些平台可能尚未得到支持
这感觉像是不正确的猜测。如今,每个移动平台都支持它,而Qt现在确实明确地依赖于标准库
即使没有,您也不需要实现自己的智能指针,因为Qt多年来一直提供以下功能:
QWidgets
(因为它们也是QObjets
)编写类似的内容:
其中,
这个
基本上是父对象,比如mainwindow,或者如果您有一个顶级小部件,它可以是Qt应用程序对象,等等。使用Qt管理内存的最简单方法是利用它们的“对象树”结构。您可以在以下问题中了解更多信息:。基本上,Qt在QObjects
之间保留一个父子关系树,当父对象被删除时,它会删除所有子对象。因此,请随意使用好的、旧的新的QObject(父对象)
,让Qt为您处理清理工作。我不是很确定,这就是为什么我说“可能”,这说明我有多不确定。我不想在这里暗示任何东西请注意,QWidget
对象几乎总是有父对象。因此,您不能对它们使用“强”智能指针QPointer
是一个弱智能指针,您应该(Qt5)将其用作对父对象的任何QObject
的弱引用,并且仅当您确实需要它时才使用。
QMenu *mainMenu = new QMenu(this);
QToolBar *toolBar = new QToolBar(this);