如果它的析构函数是 public 的,那么也可以调用 delete 删除它的对象。所以对于要使用单例的类,它的构造函数和析构函数我们都定义为 private 的,同时要防止通过拷贝构造函数和赋值操作创建对象。 先思考一下,什么情况下能访问一个类的 private 成员变量和成员函数?单例的实现需要用到这个知识点。 下面以读取配置文...
单例的智能指针+宏的实现 QtBook 如果要创建一个单例的数据库连接池 ConnectionPool,那么实现单例部分的代码和 ConfigUtil 的几乎一样,声明 private 的构造函数,拷贝构造函数,析构函数,赋值操作符,QScopedPointer instance,friend struct QScopedPointerDeleter,几乎完全一样的 getInstance() 等,这些代码几乎都是重复的,...
小提示:类 Config,Sqls,ConnectionPool 都用到了单例模式,例如 1 Singleton<ConnectionPool>::getInstance().destroy() 单例的实现和使用请参考 单例Singleton。 9. 资源下载 DBUtil 相关的代码和文件可以在这里下载到: DBUtil.7z http://www.qtdebug.com/qtbook-db-util/ 好文要顶 关注我 收藏该文 微信...
也就是说,QScopedPointer 持有一个指针,当 QScopedPointer 的变量被析构的时候(使用栈变量就是超出作用域的时候),就会自动的调用 delete 删除它持有的指针对象。我们在单例类 ConfigUtil 里定义了一个静态的 QScopedPointer 的变量 instance,其持有 ConfigUtil 类的指针对象,程序结束的时候会自动析构 instance 而析构...
Singleton.h: 单例模版 LogHandler.h: 自定义日志相关类的头文件 LogHandler.cpp: 自定义日志相关类的实现文件 定义QT_MESSAGELOGCONTEXT qDebug其实是一个宏:#define qDebug QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug,在 Debug 版本的时候会输出行号,文件名,函数名等...
* 0. 包含单例的头文件: * #include "Singleton.h" * * 1. 声明类要实现单例: * class ConnectionPool { * SINGLETON(ConnectionPool) // Here * public: * * 2. 实现单例类默认的构造函数和析构函数 * ConnectionPool::ConnectionPool() {}; ...
如果要创建一个单例的数据库连接池 ConnectionPool,那么实现单例部分的代码和 ConfigUtil 的几乎一样,声明 private 的构造函数,拷贝构造函数,析构函数,赋值操作符,QScopedPointer instance,friend struct QScopedPointerDeleter,几乎完全一样的 getInstance() 等,这些代码几乎都是重复的,每个单例的类这些内容都重复一遍,违...
下面,对 单例的模版实现 使用宏进一步简化。 Singleton.h 在Singleton.h 的最后面添加宏 SINGLETON 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 #ifndef SINGLETON_H#define SINGLETON_H#include <QMutex>#include <QScopedPointer>...