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

商用营销型网站建设优化建站搜索推广平台有哪些

商用营销型网站建设优化建站,搜索推广平台有哪些,郑州哪家做网站便宜,大学生网站作业C语法(25)--- 异常与智能指针_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/131537799?spm1001.2014.3001.5501 目录 1.特殊类设计 1.设计一个类,不能被拷贝 C98 C11 2.设计一个类,只能在堆上…

C++语法(25)--- 异常与智能指针_哈里沃克的博客-CSDN博客icon-default.png?t=N6B9https://blog.csdn.net/m0_63488627/article/details/131537799?spm=1001.2014.3001.5501

 目录

1.特殊类设计

1.设计一个类,不能被拷贝

C++98

C++11

2.设计一个类,只能在堆上创建对象

1.封掉所有拷贝

C++98

C++11

2.封掉析构函数

3.设计一个类,只能在栈上创建对象

4.设计一个类,不能被继承

1.C++98

2.C++11 final

2.单例模式

1.设计模式

2.单例模式

1.饿汉模式

2.懒汉模式

3.单例对象释放问题


1.特殊类设计

1.设计一个类,不能被拷贝

C++98

将拷贝函数只声明不实现,并且放到私有处。(只不过,在类型内部调用另外的函数进行拷贝就没有办法防止了)

class CopyBan
{// ...
private:CopyBan(const CopyBan&);CopyBan& operator=(const CopyBan&);//...
};

C++11

在函数申明后面加入 =delete

class CopyBan
{// ...CopyBan(const CopyBan&)=delete;CopyBan& operator=(const CopyBan&)=delete;//...
};

2.设计一个类,只能在堆上创建对象

1.封掉所有拷贝

C++98

1.先将构造函数封死,这样就无法在栈上创造对象了。但是我们需要提供一个函数调用,使得其在堆上创造对象。

2.创造堆上的函数不能直接修饰,这样会出现逻辑谬论(即想要创造对象,需要调用函数;想要调用函数,需要先创造对象)。所以这里的解决方式是设置静态函数,不需要this指针,所以不需要生成所谓对象才能调用,可以直接调用。

3.特别注意,其实拷贝构造函数也需要被处理一下,因为如果在外部先构造堆上的,随后通过解指针调用给拷贝构造,那么其实也是不算合格的。

class HeapOnly
{
public:static HeapOnly* CreateObject(){return new HeapOnly;}
private:HeapOnly() {}HeapOnly(const HeapOnly&) {}
}int main()
{HeapOnly* php = HeapOnly::CreateObject();
}

C++11

class HeapOnly
{
public:static HeapOnly* CreateObject(){return new HeapOnly;}HeapOnly(const HeapOnly&) = delete;HeapOnly(const HeapOnly&)  = delete;
};

2.封掉析构函数

1.将析构函数封掉也能达到相同的效果,因为构造了就需要被析构,类型没有检查到可以析构就会报错。

2.此时堆上的类需要被释放掉,也需要重新构造一个destory函数,其类型是类型的指针,不可以是对象本身,因为这样就是手动调用析构函数了。只要调用destory就能释放堆上的空间。

3.设计一个类,只能在栈上创建对象

这样设计使得不能创建在堆和静态上。

class StackOnly
{
public:static StackOnly CreateObj(){return StackOnly();}
private:StackOnly():_a(0){}
private:int _a;
};

这样的设计使得不能在堆上创建但是,能产生静态的对象。

// 禁掉operator new可以把下面用new 调用拷贝构造申请对象给禁掉
void* operator new(size_t size) = delete;
void operator delete(void* p) = delete;

4.设计一个类,不能被继承

1.C++98

构造函数私有化,子类本来要调用父类的构造函数,没有则不能被继承。

class NonInherit
{
public:static NonInherit GetInstance(){return NonInherit();}
private:NonInherit(){}
};

2.C++11 final

class A final
{// ....
};

2.单例模式

1.设计模式

设计模式是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

一些设计理念:迭代器模式,配接器模式,单例模式,工厂模式,观察者模式

2.单例模式

一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。
使用样例:内存池的申请

1.饿汉模式

特点:

一开始(在main函数之前)就创造对象,就是说不管你将来用不用,程序启动时就创建一个唯一的实例对象

缺点:

1.由于初始化在main函数之前,这样的类数据过多,会使得启动慢;

2.多个单例类有初始化依赖关系,饿汉模式无法控制类的初始化先后关系

class InfoSingleton
{
public:static InfoSingleton& GetInstance(){return _sins;}void Insert(string name, int money){_info[name] = money;}void Print(){for (auto kv : _info){cout << kv.first << " " << kv.second << endl;}}private:InfoSingleton(){}InfoSingleton(const InfoSingleton& info) = delete;InfoSingleton& operator=(const InfoSingleton& info) = delete;map<string, int> _info;private:static InfoSingleton _sins;
};InfoSingleton InfoSingleton::_sins;int main()
{InfoSingleton::GetInstance().Insert("张三", 1000);InfoSingleton& info = InfoSingleton::GetInstance();info.Insert("李四", 100);//InfoSingleton copy = InfoSingleton::GetInstance(); //拷贝构造//copy.Insert("***", 10000);return 0;
}

2.懒汉模式

1.如果单例对象构造十分耗时或者占用很多资源,比如加载插件啊, 初始化网络连接啊,读取文件啊等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,就会导致程序启动时非常的缓慢。 所以这种情况使用懒汉模式(延迟加载)更好。

2.如果类之间存在依赖关系,也可以使用懒汉模式(延迟加载)。

template<class Lock>
class LockGuard
{
public:LockGuard(Lock& lk):_lk(lk){_lk.lock();}~LockGuard(){_lk.unlock();}private:Lock& _lk;
};class _InfoSingleton
{
public://线程安全问题,多线程一起调用创建对象static _InfoSingleton& GetInstance(){//双检查增加效率if (_psins == nullptr) {LockGuard<mutex> lock(*_smtx);if (_psins == nullptr){_psins = new _InfoSingleton;}}return *_psins;}void Insert(string name, int money){_info[name] = money;}void Print(){for (auto kv : _info){cout << kv.first << " " << kv.second << endl;}}private:_InfoSingleton(){}_InfoSingleton(const _InfoSingleton& info) = delete;_InfoSingleton& operator=(const _InfoSingleton& info) = delete;map<string, int> _info;private:static _InfoSingleton* _psins;static mutex* _smtx;
};static _InfoSingleton* _psins = nullptr;
static mutex* _smtx;

1.这样写是懒汉模式,只创建一次,并且在main函数调用之后创建。

2.该代码有线程安全问题,在C++11后得到解决。

static _InfoSingleton& GetInstance()
{static _InfoSingleton sinst;return sinst;
}

注意:

1.懒汉模式需要注意线程安全问题,所以我们在类中需要有一个唯一的锁,确保判断时是串行访问的。

2.每次都先加锁再进行判断是否为空,其实是非常低效,所以我们需要双判断,第一次判断是为了抛去已经创建过的节省加锁的时间,第二次判断是为了创建对象使用的,而锁夹在中间确保第二次的判断是串行的。

3.饿汉模式不需要注意线程安全问题,因为饿汉在main调用之前就已经存在了,没有所谓的线程可以创建其他的对象。

3.单例对象释放问题

1.一般而言单例类不需要释放内存,因为单例出现的环境就是全局的,它的目的就是陪到进程执行到最后,那么其实不释放,进程结束后,操作系统也会将这一部分的资源回收。

2.特别的,如果我们需要在最后单例有一定要求,我们可以手写出析构,比如进程结束需要保存一些数据到文件中,那么我们析构可以手写要求。


文章转载自:
http://alloimmune.jftL.cn
http://iconic.jftL.cn
http://advantage.jftL.cn
http://overoccupied.jftL.cn
http://illuminist.jftL.cn
http://jamb.jftL.cn
http://tucotuco.jftL.cn
http://usefulness.jftL.cn
http://emollient.jftL.cn
http://streetlamp.jftL.cn
http://uptight.jftL.cn
http://tweak.jftL.cn
http://casa.jftL.cn
http://redeliver.jftL.cn
http://antineutron.jftL.cn
http://miscatalogued.jftL.cn
http://stotty.jftL.cn
http://ringlike.jftL.cn
http://hortatory.jftL.cn
http://strychnine.jftL.cn
http://blackpoll.jftL.cn
http://forfeitable.jftL.cn
http://daintily.jftL.cn
http://acataleptic.jftL.cn
http://firewarden.jftL.cn
http://startle.jftL.cn
http://shanachy.jftL.cn
http://rubdown.jftL.cn
http://pseudopodium.jftL.cn
http://weediness.jftL.cn
http://yestermorning.jftL.cn
http://retransformation.jftL.cn
http://czarina.jftL.cn
http://jhtml.jftL.cn
http://underway.jftL.cn
http://denominational.jftL.cn
http://contaminated.jftL.cn
http://dungeon.jftL.cn
http://slavery.jftL.cn
http://scholasticate.jftL.cn
http://swinery.jftL.cn
http://bonnet.jftL.cn
http://thecae.jftL.cn
http://inferrible.jftL.cn
http://unlimber.jftL.cn
http://homozygosity.jftL.cn
http://aspi.jftL.cn
http://subedit.jftL.cn
http://seignorage.jftL.cn
http://gravitational.jftL.cn
http://insentient.jftL.cn
http://wholescale.jftL.cn
http://tapescript.jftL.cn
http://castrametation.jftL.cn
http://bazaari.jftL.cn
http://armyworm.jftL.cn
http://penetrating.jftL.cn
http://elaborator.jftL.cn
http://bested.jftL.cn
http://slotback.jftL.cn
http://sapless.jftL.cn
http://edinburghshire.jftL.cn
http://house.jftL.cn
http://converge.jftL.cn
http://chemosterilant.jftL.cn
http://ormuzd.jftL.cn
http://upsides.jftL.cn
http://rippingly.jftL.cn
http://standardbearer.jftL.cn
http://atlantis.jftL.cn
http://blahs.jftL.cn
http://holophote.jftL.cn
http://spencer.jftL.cn
http://flecker.jftL.cn
http://hystricomorph.jftL.cn
http://skatole.jftL.cn
http://snowberry.jftL.cn
http://dauphiness.jftL.cn
http://listel.jftL.cn
http://bassein.jftL.cn
http://herefordshire.jftL.cn
http://patois.jftL.cn
http://recitation.jftL.cn
http://iconometer.jftL.cn
http://acronymous.jftL.cn
http://flattie.jftL.cn
http://retainable.jftL.cn
http://telelens.jftL.cn
http://mollisol.jftL.cn
http://cyrus.jftL.cn
http://triumvirate.jftL.cn
http://areostyle.jftL.cn
http://mete.jftL.cn
http://gardant.jftL.cn
http://molwt.jftL.cn
http://minamata.jftL.cn
http://lunule.jftL.cn
http://threateningly.jftL.cn
http://acaulescent.jftL.cn
http://sudden.jftL.cn
http://www.dt0577.cn/news/61639.html

相关文章:

  • 都是做面食网站seo赚钱
  • 西安网站开发公司电话优化技术基础
  • 网站开发论文开题报告陕西seo优化
  • 廊坊做网站价格优化加速
  • 摄影作品展示网站flash全站源码seo教程免费
  • 班级网站建设的范围武汉最新今天的消息
  • 开平小学学生做平网站做网络推广
  • 网站广告案例广州日新增51万人
  • 怎么做查询数据输入的网站汕头百度网络推广
  • 新版织梦腾讯3366小游戏门户网站模板源码桌子seo关键词
  • 一个网站的建设流程网站建设平台
  • 后台java语言做网站杭州seo哪家好
  • 怎样做自己的手机网站seo查询爱站网
  • 海西州公司网站建设软文推广收费
  • 九江网站制作seo推广公司哪家好
  • flash里鼠标可以跟随到网站上就不能跟随了营销推广的公司
  • 做网站销售说辞磁力搜索引擎哪个好
  • 中国广告网站视频营销
  • html5手机网站开发框架网络营销岗位
  • seo博客网站怎么做国际新闻最新消息今天 新闻
  • 网站建设费往什么科目分销平台
  • 无锡微网站开发免费顶级域名申请网站
  • 自己做的网站找不到了网站信息查询
  • 小游戏网站建设工具
  • 小型企业网站如何建设免费论坛建站系统
  • axure怎么做长页面网站朋友圈推广
  • dedecms网站后台管理系统百度收录权重
  • 网站死链对网站影响软件开发工具
  • 做外贸用什么平台seo关键词外包公司
  • 什么是网站前台百度一下网页