赞
踩
代码描述:
写了一个类,命名为对象池(ObjectPool ),里面放个map容器。
3个功能:添加对象,删除对象,查找对象
该类只构建一次,故采用单例模式
功能描述:对象池可以存储其他类的对象指针
单例模式的头文件
#ifndef jz_singleton_h__ #define jz_singleton_h__ template<typename T> class SINGLETON { public: static T* get_instance() { static T instance; return &instance; } virtual ~SINGLETON() noexcept {} SINGLETON(const SINGLETON&) = delete; SINGLETON& operator=(const SINGLETON&) = delete; protected: SINGLETON() {} }; #endif
对象池的头文件
#ifndef OBJECTPOOL_H #define OBJECTPOOL_H #include <QObject> #include <QMap> #include "singleton.h" class ObjectPool : public QObject,public SINGLETON<ObjectPool> { Q_OBJECT public: explicit ObjectPool(QObject *parent = nullptr); bool addobject(QString object_name,QObject *object); bool removeobject(QString object_name); QObject* getobject(QString object_name); private: QMap<QString,QObject*>object_pool_; }; #endif // OBJECTPOOL_H
对象池的cpp文件
#include "objectpool.h" #include <QDebug> ObjectPool::ObjectPool(QObject *parent) : QObject(parent) { } bool ObjectPool::addobject(QString object_name, QObject *object) { if(object_name.isEmpty()) { return false; } if(object==nullptr) { return false; } if(object_pool_.contains(object_name)) { return false; } object_pool_.insert(object_name,object); qDebug()<<"add object success"; return true; } bool ObjectPool::removeobject(QString object_name) { object_pool_.remove(object_name); qDebug()<<"remove object success"; return true; } QObject *ObjectPool::getobject(QString object_name) { return object_pool_.value(object_name); }
用法:
//这里构造对象,先构造父类,生成单例指针。再构造子类对象池
ObjectPool *test_temp_pool= dynamic_cast<ObjectPool *>(ObjectPool::get_instance());
//先添加一个对象
QString first("first_object");
QObject *first_object=new QObject();
test_temp_pool->addobject(first,first_object);
//再删除这个对象
test_temp_pool->removeobject(first);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。