当前位置: 首页 > wzjs >正文

南京 推广 网站建设沈阳第一建筑公司

南京 推广 网站建设,沈阳第一建筑公司,即墨网站建设哪里有,wordpress app提示前言: 单例模式可以参考如下文章: 我的设计模式,单例模式的设计和实现 c 单例模式的模板类 - 川野散人 - 博客园 1.为什么需要单例模板类? 场景问题: 如果需要100个单例类就需要设计100个单例模式,代…

前言:

单例模式可以参考如下文章:

我的设计模式,单例模式的设计和实现

c++ 单例模式的模板类 - 川野散人 - 博客园

1.为什么需要单例模板类?

场景问题:

如果需要100个单例类就需要设计100个单例模式,代码重复且冗余,不利于扩展。

单例模板类可以实现单例模式的基础功能,普通类继承它之后,就拥有单例的特性。

2.单例模板类需要具备哪些特质?如何设计?

单例模板类需要具备哪些特质?

  • 单例模板类的构造函数应该是protected的?(子类要拥有创建父类的权限,但是不能是pubic,如果是public就丧失单例特性)
  • 单例模板类的析构函数应该是protected的?(子类要拥有析构父类的权限,但是不能是pubic,会重复析构)
  • 单例模板不能使用拷贝构造
  • 单例模板不能使用拷贝赋值
  • 单例模板应提供实例的public方法

设计代码如下:

template<typename T>
class Singleton
{
protected:Singleton(){std::cout << "Singleton()!" << std::endl;}~Singleton(){std::cout << "~Singleton()!" << std::endl;}
public:static T& getInstance(){static std::mutex mtx;static std::unique_ptr<T> uniPtr;if (uniPtr == nullptr){mtx.lock();if (uniPtr == nullptr){uniPtr.reset(new T());}mtx.unlock();}return *uniPtr;}
private:Singleton(const Singleton& s) = delete;Singleton& operator = (const Singleton& s) = delete;
};

继承者应注意哪些?

  • 继承者的构造函数应设为私有
  • 继承者应设置单例模板类为友元(父类可以调用继承者私有构造函数)
class MySingleton :public Singleton<MySingleton>
{friend class Singleton<MySingleton>;
private:MySingleton() {std::cout << "MySingleton()!" << std::endl;}
public://unique_ptr需要权限销毁管理的对象~MySingleton() {std::cout << "~MySingleton()!" << std::endl;}
public:void MySingletonSay(){std::cout << "MySingletonSay : Hello World!" << std::endl;}
};

3.测试代码

int main()
{{MySingleton::getInstance().getInstance().MySingletonSay();}{MySingleton::getInstance().MySingletonSay();}
}

输出:

Singleton()!
MySingleton()!
MySingletonSay : Hello World!
MySingletonSay : Hello World!
~MySingleton()!
~Singleton()!

4.当我设置继承者析构函数为私有时,编译unique_ptr报错

class MySingleton :public Singleton<MySingleton>
{friend class Singleton<MySingleton>;
private:MySingleton() {std::cout << "MySingleton()!" << std::endl;}~MySingleton() {std::cout << "~MySingleton()!" << std::endl;}
public:void MySingletonSay(){std::cout << "MySingletonSay : Hello World!" << std::endl;}
};

5.继承者析构函数不显式声明,编译unique_ptr不报错,但析构不完全

class MySingleton :public Singleton<MySingleton>
{friend class Singleton<MySingleton>;
private:MySingleton() {std::cout << "MySingleton()!" << std::endl;}
public:void MySingletonSay(){std::cout << "MySingletonSay : Hello World!" << std::endl;}
};
  • 输出
Singleton()!
MySingleton()!
MySingletonSay : Hello World!
MySingletonSay : Hello World!
~Singleton()!

6.继承者析构函数声明为public可能出现的问题举例

#include <iostream>
#include <memory>
#include <mutex>template<typename T>
class Singleton
{
protected:Singleton(){std::cout << "Singleton()!" << std::endl;}~Singleton(){std::cout << "~Singleton()!" << std::endl;}
public:static T& getInstance(){static std::mutex mtx;static std::unique_ptr<T> uniPtr;if (uniPtr == nullptr){mtx.lock();if (uniPtr == nullptr){uniPtr.reset(new T());}mtx.unlock();}return *uniPtr;}
private:Singleton(const Singleton& s) = delete;Singleton& operator = (const Singleton& s) = delete;
};class MySingleton :public Singleton<MySingleton>
{friend class Singleton<MySingleton>;
private:MySingleton() {std::cout << "MySingleton()!" << std::endl;}
public://unique_ptr需要权限销毁管理的对象~MySingleton() {std::cout << "~MySingleton()!" << std::endl;}
public:void MySingletonSay(){std::cout << "MySingletonSay : Hello World!" << std::endl;}
};int main()
{{MySingleton::getInstance().MySingletonSay();delete &MySingleton::getInstance();}std::cout << "end...................." << std::endl;
}
  • 输出:出现了重复析构sos
Singleton()!
MySingleton()!
MySingletonSay : Hello World!
~MySingleton()!
~Singleton()!
end....................
~MySingleton()!
~Singleton()!

7.如上的问题怎么解决呢?欢迎观众大佬们留言

http://www.dtcms.com/wzjs/546404.html

相关文章:

  • 电力建设期刊 网站无法访问微信朋友圈推广平台收费标准
  • 苏州吴中区做网站价格河南国基建设集团--官方网站
  • 惠阳惠州网站建设百度搜索什么关键词排名
  • 网站开发常用模板自助建站系统模板
  • 网站建设预算申请表网站vps
  • 网站建设管理中se是什么意思马鞍山网站建设电话
  • 文登区城乡建设局网站四平市建设局网站
  • 服装公司网站模板网页布局的设计步骤
  • 网站1g的空间能用多久爱站工具包下载
  • 南京网站建设多少钱设计网站vcg
  • wordpress快速仿站视频教程网站使用mip后效果怎么样
  • 网站扫码怎么做的软件公司组织架构
  • 宝安网站制作网站建设网站制作公司 沧州
  • 免费seo网站自动推广在线平面设计招聘
  • 建设一个视频网站首页wordpress 移动端主题
  • 电子商务网站开发计划书网站建设职能
  • 网站建设价格兴田德润i网址多少建设工程包括什么工程
  • 如何做企业网站电商怎么推广自己的产品
  • 网站优化设计的基础是网站基本要素及每个细节的优化wordpress cat
  • 做网站需要哪些条件南京汽车集团网站建设
  • 2017学脚本语言做网站网站开发维护工作
  • 西安单位网站制作赌求网站开发
  • 系统网站建设pptseo快速排名软件推荐
  • 保定网站优化公司土建设计网站
  • 建设网站哪专业怎么用手机开发app
  • 怎么自己创建网站免费cdn 加速 网站
  • 免费制作软件的网站wordpress怎么禁google
  • 建设网站 莆田做网站付费流程
  • 苏州专业网站建设设计公司大秦建设集团有限责任公司官方网站
  • 漳州做网站含博大网教学网站建设