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

网站定制哪家快建筑室内设计网

网站定制哪家快,建筑室内设计网,wordpress读取文件内容,wordpress 人物页面单例模式要求一个类在一个进程中只能创建一个对象。比如 cyberrt 中的 TimingWheel 类就是单例模式#xff0c;这个类管理着一个进程内的所有定时器#xff0c;只需要一个对象就可以。 单例模式的实现有两种方式#xff0c;懒汉式和饿汉式。懒汉式#xff0c;当第一次使用…单例模式要求一个类在一个进程中只能创建一个对象。比如 cyberrt 中的 TimingWheel 类就是单例模式这个类管理着一个进程内的所有定时器只需要一个对象就可以。 单例模式的实现有两种方式懒汉式和饿汉式。懒汉式当第一次使用的时候才会真正创建这个对象饿汉式不管会不会用到这个对象在进程启动的时候都会创建这个对象如果一直不使用那么就会造成资源浪费。饿汉式的缺点是可能造成资源浪费但是对性能友好因为在进程启动的时候就直接创建了需要使用的时候可以直接拿来使用懒汉式反之。 在工作中一般使用懒汉式。 1 懒汉式 懒汉式示例代码如下在如下代码中实现了自动回收的机制通过内部的类 Recycler 来完成。 #include iostream #include mutexclass Test { public:static Test *GetInstance() {std::lock_guardstd::mutex lock(mtx);if (instance nullptr) {instance new Test();return instance;}return instance;};Test(const Test ) delete;Test operator(const Test ) delete;~Test() {std::cout ~Test() std::endl;};class Recycler {public:~Recycler() {if (Test::instance) {delete Test::instance;} else {std::cout no need to recycle std::endl;}}};static Recycler recycler;void Do() {std::cout Do() std::endl;}private:static Test *instance;static std::mutex mtx;Test() {std::cout Test() std::endl;}; };Test *Test::instance nullptr; std::mutex Test::mtx; Test::Recycler recycler;void TestDo(Test test) {test.Do(); }int main() {Test *test Test::GetInstance();test-Do();return 0; }特点 1第一次使用对象的时候才会创建懒加载模式。懒加载思想很常见比如 linux 中用户态的内存管理就是典型的懒加载。 2在 GetInstance() 需要加锁如果多线程频繁调用会影响性能。个人认为这个只是理论上的缺点真正使用中单例模式很少有多线程频繁调用的情况。 注意点 1在 GetInstance() 中需要加锁。 2如下两个静态成员变量需要在类的外部初始化 类的静态变量需要在类外部初始化这是静态变量和非静态变量的明显区别。 static Test *instance;   static std::mutex mtx; 3拷贝构造函数和赋值运算符需要禁用 如果不禁用通过拷贝构造函数和赋值运算符可以生成新的对象就不能保证单例了。 2 饿汉式 不管将来用不用这个对象都会创建好。 #include iostream #include mutexclass Test { public:static Test *GetInstance() {return instance;};Test(const Test ) delete;Test operator(const Test ) delete;~Test() {std::cout ~Test() std::endl;};class Recycler {public:~Recycler() {if (Test::instance) {delete Test::instance;} else {std::cout no need to recycle std::endl;}}};static Recycler recycler;void Do() {std::cout Do() std::endl;}private:static Test *instance;Test() {std::cout Test() std::endl;}; };Test *Test::instance new Test(); Test::Recycler recycler;char *p (char *)malloc(1024);int main() {printf(main start\n);Test *test Test::GetInstance();test-Do();printf(p: %p\n, p);p[0] 1;return 0; }题外话 从上边的代码实现中可以看出来在 c 中在函数外部是可以调用 new 来创建对象的这种使用方式是自己很少使用的。 并且在函数外部也可以是有 malloc() 来申请内存。 但是在 c 中在函数外部申请内存的话如下代码所示编译会报错。 #include stdlib.h #include stdio.h #include string.hconst char *p (char *)malloc(1024); int main() {printf(p: %p\n, p);p[0] 1;return 0; }3 cyberrt 中 TimingWheel 单例实现 cyberrt 中的类 TimingWheel 使用了单例模式。TimingWheel 是一个进程内所有定时器的底层管理者。cyberrt 中实现单例的方式封装在了一个宏里边这个宏是 DECLARE_SINGLETON定义如下实现主要有以下几点。 1使用 std::call_once 来实现保证了原子性 2禁用了拷贝构造函数和赋值构造函数 #ifndef DISALLOW_COPY_AND_ASSIGN #define DISALLOW_COPY_AND_ASSIGN(classname) \classname(const classname ) delete; \classname operator(const classname ) delete; #endif#ifndef DECLARE_SINGLETON #define DECLARE_SINGLETON(classname) \public: \static classname *instance(bool create_if_needed true) { \static classname *inst nullptr; \if (!inst create_if_needed) { \static std::once_flag flag; \std::call_once(flag, [] { inst new (std::nothrow) classname(); }); \} \return inst; \} \\static void clean_up() { \auto inst instance(false); \if (inst ! nullptr) { \call_shut_down(inst); \} \} \\private: \classname(); \DISALLOW_COPY_AND_ASSIGN(classname) #endif
http://www.w-s-a.com/news/214753/

相关文章:

  • 网站创建方案论文旅游网站的设计与制作html
  • 网站建设的数据导入导出开发小程序需要多少钱费用
  • 局网站建设进入前十名wordpress user role editor
  • 网站托管如何收费搜一下百度
  • 中国建设劳动协会网站wordpress 区块链媒体
  • 网站开源是什么意思西安做网站科技有限公司
  • 自己怎么用h5做网站肇庆seo
  • 长沙网站seo优化公司东莞企业官方网站建设
  • 网站个人备案材料北京网站推广价格
  • 百度做任务的网站电子工程网网站
  • 中介订制网站开发玉溪网站建设设计
  • 免费网站免费无遮挡手机页面设计软件
  • 网站建设需求规格说明书中山模板建站公司
  • wordpress get值网站建设 seo sem
  • 网站建设微信开发工厂代加工平台
  • 厦门 网站建设 公司哪家好asp.net 创建网站
  • 专业北京网站建设凡科网做网站怎么样
  • 金富通青岛建设工程有限公司网站浙江省住建厅四库一平台
  • 有搜索引擎作弊的网站企业建设H5响应式网站的5大好处6
  • 是做网站编辑还是做平面设计seo外包公司接单
  • 做性的网站有哪些苏州专业网站设计制作公司
  • 陵水网站建设友创科技十大优品店排名
  • 想换掉做网站的公司简要说明网站制作的基本步骤
  • 国企公司网站制作wordpress 浮动定位
  • 网站网页直播怎么做的企业网站建设推荐兴田德润
  • 网站建设熊猫建站厦门seo全网营销
  • 扁平网站设计seo是什么岗位的缩写
  • 工商企业网站群晖配置wordpress 80端口
  • 企业网站建设流程步骤镇江东翔网络科技有限公司
  • 网络工程师和做网站哪个难网络建站如何建成