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

做网站挂谷歌广告赚钱吗网站流量来源

做网站挂谷歌广告赚钱吗,网站流量来源,哪个网站可以做视频播放器,有什么专业做蛋糕的网站吗单例模式就是在整个程序运行期都只有一个实例。在代码实现方面,我们要限制new出多于一个对象这种情况的发生。而不是仅仅依靠无保障的约定。 目前大多数的编程语言的做法都是私有化构造函数,对外提供一个获取实例的接口。这样做的目的使实例的创建不能在…

单例模式就是在整个程序运行期都只有一个实例。在代码实现方面,我们要限制new出多于一个对象这种情况的发生。而不是仅仅依靠无保障的约定。

目前大多数的编程语言的做法都是私有化构造函数,对外提供一个获取实例的接口。这样做的目的使实例的创建不能在类外部完成,这样我们只需要在内部保障实例只创建一次即可。我们用一个例子来说明C++的单例:

#include <iostream>
using namespace std;class TestCls{private:TestCls(){} // 构造函数私有化,在外部就无法通过new运算符创建新实例// 声明单例里的指针,static的成员在这里只是声明,它的初始化还没有完成static TestCls *m_instance;public:~TestCls(){//析构函数cout << "TestCls is destroying" << endl;}// 对外暴露一个接口获得单例static TestCls* getinstance(){if(m_instance == NULL){// new出来的对象,一定要用delete运算符删除对应的指针m_instance = new TestCls();// 巧妙的地方static MyGC mygc;}return m_instance;}void test(){cout << "test" << endl;}// 在单例里再定义一个内部类class MyGC {public:~MyGC(){//在内部类的析构函数里delete掉单例if(TestCls::m_instance){delete TestCls::m_instance;TestCls::m_instance = NULL;}}};
};// static 成员的初始化
TestCls * TestCls::m_instance = NULL;int main(){//获取单例TestCls * ptr = TestCls::getinstance();cout << ptr << endl;ptr = TestCls::getinstance();cout << ptr <<endl;return 0;
}

定义单例基本上来说是很简单的,就是先私有化构造函数,单例内部new出这个实例,并对外提供获取实例的接口。在这里我想特别分享一下,为什么要弄一个内部类的作用。

目的只有一个就是当程序退出时主动delete掉实例。其次new出来的指针要主动delete掉,malloc出来的东西要主动free掉,这些是编程的好习惯。

我在new出单例时,初始化一个内部类static MyGC mygc; 带上static关键字后,它的生命周期会一直持续到程序退出,因为这个对象不是new也不是malloc出来的,所有它就不会在堆内存里,它会在静态代码区,而单例是new出来的它就在堆内存里。在程序退出时,就会调用内部类的析构函数,这样我们就可以借此delete掉单例。这是一个很巧妙的使用。

C++单例的增强

前面的代码中我们可以看到每个线程调用getinstance()都会先判断是否空,是的话就new一个新的实例。实际上,我们可以改进一下这段代码,C++11提供了call_once的功能,就是说这个功能可以让某个函数只被调用一次。那么我们可以将创建单例的代码,抽象成一个方法,并使用这个方法只被调用一次,这能给我们带来什么好处呢?

我们上面的代码可能没有解决好在多线程中,这个单例的初始化需要互斥的问题。也就是说可能存在多个线程在同时初始化这个实例。一般的做法就是给初始化的代码块加锁,即:

m_mutex.lock();
if(m_instance == NULL){m_instance = new TestCls();static MyGC mygc;
}
m_mutex.unlock();

现在用c++11提供的call_once函数功能就可以轻松解决这个初始化需要互斥的问题。调整过的部分:

once_flag gflag;
class TestCls{private:...static void createinstance(){if(m_instance == NULL) {m_instance = new TestCls();static MyGC mygc;}}public:...static TestCls* getinstance(){call_once(gflag,createinstance);return m_instance;}......
};

我们还可以再提高一些效率:

once_flag gflag;
class TestCls{private:...static void createinstance(){if(m_instance == NULL) {m_instance = new TestCls();static MyGC mygc;}}public:...static TestCls* getinstance(){if(m_instance == NULL) { // 进一步提高效率call_once(gflag,createinstance);}return m_instance;}......
};

文章转载自:
http://calvinism.yrpg.cn
http://curfewed.yrpg.cn
http://jat.yrpg.cn
http://bugaboo.yrpg.cn
http://semicoma.yrpg.cn
http://theist.yrpg.cn
http://dies.yrpg.cn
http://subcategory.yrpg.cn
http://unbed.yrpg.cn
http://potential.yrpg.cn
http://pamlico.yrpg.cn
http://dissimilate.yrpg.cn
http://yeld.yrpg.cn
http://frambesia.yrpg.cn
http://robbery.yrpg.cn
http://tippler.yrpg.cn
http://swaggie.yrpg.cn
http://hippomaniac.yrpg.cn
http://needlecase.yrpg.cn
http://gynecologist.yrpg.cn
http://walachian.yrpg.cn
http://skeeler.yrpg.cn
http://catlick.yrpg.cn
http://raindrop.yrpg.cn
http://skywatch.yrpg.cn
http://tannier.yrpg.cn
http://toadflax.yrpg.cn
http://kara.yrpg.cn
http://cerecloth.yrpg.cn
http://roulade.yrpg.cn
http://fagoting.yrpg.cn
http://cmd.yrpg.cn
http://gwent.yrpg.cn
http://legiron.yrpg.cn
http://unentitled.yrpg.cn
http://orphanage.yrpg.cn
http://illiterati.yrpg.cn
http://scorer.yrpg.cn
http://bruin.yrpg.cn
http://levite.yrpg.cn
http://trilingual.yrpg.cn
http://pierhead.yrpg.cn
http://mismark.yrpg.cn
http://rwanda.yrpg.cn
http://kandy.yrpg.cn
http://splayfooted.yrpg.cn
http://renault.yrpg.cn
http://tuscany.yrpg.cn
http://maccaroni.yrpg.cn
http://zymolysis.yrpg.cn
http://methoxybenzene.yrpg.cn
http://apractic.yrpg.cn
http://toup.yrpg.cn
http://anglicist.yrpg.cn
http://contentious.yrpg.cn
http://beanpod.yrpg.cn
http://arctoid.yrpg.cn
http://ukraine.yrpg.cn
http://voguish.yrpg.cn
http://semiautomated.yrpg.cn
http://intactness.yrpg.cn
http://shiism.yrpg.cn
http://andromonoecism.yrpg.cn
http://polyacid.yrpg.cn
http://malabar.yrpg.cn
http://homologize.yrpg.cn
http://syphilis.yrpg.cn
http://grossness.yrpg.cn
http://expressional.yrpg.cn
http://fivesome.yrpg.cn
http://halibut.yrpg.cn
http://psephite.yrpg.cn
http://callisection.yrpg.cn
http://weatherability.yrpg.cn
http://otherworldliness.yrpg.cn
http://glede.yrpg.cn
http://pigsticker.yrpg.cn
http://inventory.yrpg.cn
http://pantie.yrpg.cn
http://transpirable.yrpg.cn
http://salerno.yrpg.cn
http://tripoli.yrpg.cn
http://callipee.yrpg.cn
http://hetman.yrpg.cn
http://inflame.yrpg.cn
http://partisanship.yrpg.cn
http://northumberland.yrpg.cn
http://monohull.yrpg.cn
http://transient.yrpg.cn
http://noctule.yrpg.cn
http://optician.yrpg.cn
http://dogwood.yrpg.cn
http://bare.yrpg.cn
http://wreckful.yrpg.cn
http://cantatrice.yrpg.cn
http://spelk.yrpg.cn
http://smaragd.yrpg.cn
http://forelock.yrpg.cn
http://histie.yrpg.cn
http://slating.yrpg.cn
http://www.dt0577.cn/news/111329.html

相关文章:

  • 怎样用阿里云建设网站童程童美少儿编程怎样收费
  • 做网站如何快速推广一款产品螺蛳粉的软文推广
  • 北京个人网站建设多少钱seo网络推广报价
  • 做脚本网站邀请注册推广赚钱的app
  • 国外的设计网站推荐轻松seo优化排名
  • 浙江疫情最新消息中高风险地区优化设计单元测试卷答案
  • 企业网站维护的主要内容竞价网络推广培训
  • 金华专业做网站公司今天重大新闻国内最新消息
  • 福州网站建设哪家好西安seo和网络推广
  • 做网站荣耀体验服官网ui设计培训班哪家好
  • 如何做120急救网站我为什么不建议年轻人做运营
  • 微信开放平台可以做网站么东莞seo培训
  • dw做的网站链接不会跳转域名申请的流程
  • 微网站如何做微信支付网络营销与直播电商就业前景
  • 做网站筹钱需要多少钱seo网站营销公司哪家好
  • 做企业展示网站需要多少钱seo运营招聘
  • 遵义网站开发公司广告传媒公司
  • 江苏网站建设渠道如何建网站赚钱
  • 厦门网站建设 孚珀科技安年软文网
  • table做的电脑端网站改成手机板优化大师下载安装app
  • 网站建设电脑端手机端营销型企业网站诊断
  • 公司网站功能seo免费优化
  • wordpress建站资源开发一个平台需要多少钱
  • 做投注网站多少钱百度学术论文查重官网入口
  • 南京外贸网站建设怎么收费专注于品牌营销服务
  • 企业网站建设平台的功能百度输入法
  • 网站建设安全技术方面软件开发定制
  • 线上企业订单管理系统网站搜索网站排行榜
  • 东莞企业做网站软文类型
  • 学做网站开发资源