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

网站建设与维护高职企业如何进行网络营销

网站建设与维护高职,企业如何进行网络营销,网站在线留言怎么做,90后做网站前言: 单例模式可以参考如下文章: 我的设计模式,单例模式的设计和实现 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/500873.html

相关文章:

  • dreamweaver网站教程百度推广话术全流程
  • 网站建设推广文案怎么制作网页推广
  • 萧县哪有做网站的网站提交工具
  • 安卓商城优化教程网站推广排名
  • 鹤山区网站建设大连网站推广
  • 电影网站怎么做关键词寻找郑州网站优化公司
  • 网站建设短期培训中国目前最好的搜索引擎
  • 公共交易中心资源网广州seo做得比较好的公司
  • 网站建设的背景有哪些新开传奇网站发布站
  • 网站怎么做海外推广方案东莞营销网站建设优化
  • 网站构建建设案例展示seo业务培训
  • 中国建设工程协会网站电话赛事资讯赛马资料
  • 潮州网站推广教程武汉seo楚天
  • 厦门 微网站建设公司长春网站建设公司
  • 东莞专业的网站推广价格推广普通话海报
  • 东莞市做网站的今日新闻联播主要内容
  • 单位做网站有哪些百度推广靠谱吗
  • 备案后网站打不开旺道seo推广系统怎么收费
  • 深圳建设局官方网站有没有购买链接
  • 婚纱网站目录优化南昌seo招聘信息
  • 为什么不能用来名字做网站名seo网站排名优化服务
  • 车陂网站建设什么是网络营销战略
  • 建设网站需要多久到账北京seo推广服务
  • 开贸易公司怎么起步黑帽seo培训多少钱
  • wordpress文章页怎么调用网站图片域名注册查询入口
  • 电商培训类网站模板下载武汉全网营销推广公司
  • 国内外知名建设设计网站长沙百度快速排名
  • 快速备份wordpress台州优化排名推广
  • 建设网站公司专业服务seo网络优化师招聘
  • 免费的网络电视app成都网站搜索排名优化公司