Qt内存管理机制
来源:互联网 发布:风机scada数据与故障 编辑:程序博客网 时间:2024/05/18 03:06
C++ 内存管理机制
- 让创建的对象自己 delete 自己的子对象(这里所说的子对象,是指对象的属性,而不是子类,以下类似);
- 让最后一个对象处理 delete;
- 不管内存。
Qt 内存管理机制
QPointer
- // QPointer 表现类似普通指针
- QDate *mydate = new QDate(QDate::currentDate());
- QPointer mypointer = mydata;
- mydate->year(); // -> 2005
- mypointer->year(); // -> 2005
- // 当对象 delete 之后,QPointer 会有不同的表现
- delete mydate;
- if(mydate == NULL)
- printf("clean pointer");
- else
- printf("dangling pointer");
- // 输出 dangling pointer
- if(mypointer.isNull())
- printf("clean pointer");
- else
- printf("dangling pointer");
- // 输出 clean pointer
QObjectCleanupHandler
- // 创建实例
- QObjectCleanupHandler *cleaner = new QObjectCleanupHandler;
- // 创建窗口
- QPushButton *w = new QPushButton("Remove Me");
- w->show();
- // 注册第一个按钮
- cleaner->add(w);
- // 如果第一个按钮点击之后,删除自身
- connect(w, SIGNAL(clicked()), w, SLOT(deleteLater()));
- // 创建第二个按钮,注意,这个按钮没有任何动作
- w = new QPushButton("Nothing");
- cleaner->add(w);
- w->show();
- // 创建第三个按钮,删除所有
- w = new QPushButton("Remove All");
- cleaner->add(w);
- connect(w, SIGNAL(clicked()), cleaner, SLOT(deleteLater()));
- w->show();
Qt 垃圾收集
- class CountedObject
- {
- public:
- CountedObject()
- {
- ctr=0;
- }
- void attach()
- {
- ctr++;
- }
- void detach()
- {
- ctr--;
- if(ctr <= 0)
- delete this;
- }
- private:
- int ctr;
- };
- class CountedObject : public QObject
- {
- Q_OBJECT
- public:
- CountedObject()
- {
- ctr=0;
- }
- void attach(QObject *obj)
- {
- ctr++;
- connect(obj, SIGNAL(destroyed(QObject*)), SLOT(detach()));
- }
- public slots:
- void detach()
- {
- ctr--;
- if(ctr <= 0)
- delete this;
- }
- private:
- int ctr;
- };
- class CountedObject : public QObject
- {
- public:
- CountedObject()
- {
- }
- void attach(QObject *obj)
- {
- // 检查所有者
- if(obj == 0)
- return;
- // 检查是否已经添加过
- if(owners.contains(obj))
- return;
- // 注册
- owners.append(obj);
- connect(obj, SIGNAL(destroyed(QObject*)), SLOT(detach(QObject*)));
- }
- public slots:
- void detach(QObject *obj)
- {
- // 删除
- owners.removeAll(obj);
- // 如果最后一个对象也被 delete,删除自身
- if(owners.size() == 0)
- delete this;
- }
- private:
- QList owners;
- };
本文来自 DevBean's World:http://www.devbean.info。
转载时请标明文章原始出处:http://www.devbean.info/2011/03/qt_memory_management/
0 0
- Qt 内存管理机制
- Qt 内存管理机制
- Qt 内存管理机制
- Qt 内存管理机制
- Qt的内存管理机制
- Qt 内存管理机制
- Qt 内存管理机制
- Qt内存管理机制
- Qt 内存管理机制
- C++/Qt 内存管理机制
- Qt 内存管理机制
- QT内存管理机制
- QT内存管理机制
- 内存管理机制
- 内存管理机制
- 内存管理机制
- 内存管理机制
- 内存管理机制
- linux驱动学习-3th
- 黑马程序员-C语言基础学习(四)
- helloword
- 解决百度地图黑屏显示的问题
- 指令
- Qt内存管理机制
- C++第二周作业
- 一步步学习java并发编程模式之Active Object模式(二)java实现异步调用
- Introducing 35 Pentesting Tools Used for Web Vulnerability Assessment
- Tomcat性能调优方案
- 002_002 Python 写入文件
- primer three_Practice
- 雅的“小生意思维”让唯品会在夹缝中滋润生长
- 一个北京seo的第一篇笔记