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

网站图片优化的概念怎么在百度上推广自己的产品

网站图片优化的概念,怎么在百度上推广自己的产品,custom post type wordpress,wordpress 文档文章目录 智能指针的使用和原理智能指针的使用场景RAII和智能指针C标准库智能指针的使用 智能指针的使用和原理 智能指针的使用场景 1. 下面的程序中,new了以后,我们也delete了,但是因为抛异常导致后面的delete没有得到执行,所以…

文章目录

  • 智能指针的使用和原理
    • 智能指针的使用场景
    • RAII和智能指针
    • C++标准库智能指针的使用

智能指针的使用和原理

智能指针的使用场景

1. 下面的程序中,new了以后,我们也delete了,但是因为抛异常导致后面的delete没有得到执行,所以就内存泄漏了,所以我们需要new以后捕获异常,捕获到异常后delete内存,再把异常抛出。
2.但是因为new本身也可能抛异常,连续的两个new和下面的Divide都可能会抛异常,让我们处理起来很麻烦。智能指针放到这样的场景里面就让问题简单多了。

double Divide(int a, int b)
{// 当b == 0时抛出异常if (b == 0){throw "Divide by zero condition!";}else{return (double)a / (double)b;}
}void Func()
{// 这⾥可以看到如果发⽣除0错误抛出异常,另外下⾯的array和array2没有得到释放。// 所以这⾥捕获异常后并不处理异常,异常还是交给外⾯处理,这⾥捕获了再重新抛出去。// 但是如果array2new的时候抛异常呢,就还需要套⼀层捕获释放逻辑,这⾥更好解决⽅案// 是智能指针,否则代码太戳了int* array1 = new int[10];int* array2 = new int[10];// 抛异常呢// 连续的两个new// 如果第一个new抛异常可以捕获// 如果第二个new抛异常,可以解决delete第二个new// 但是第一个new没有被delete// 这样就需要再第二个new的地方捕获异常,delete第一个new// 如果有很多个new呢,就太麻烦了,这里就需要智能指针了try{int len, time;cin >> len >> time;cout << Divide(len, time) << endl;}catch (...){cout << "delete []" << array1 << endl;cout << "delete []" << array2 << endl;delete[] array1;delete[] array2;throw; // 异常重新抛出,捕获到什么抛出什么}// ...cout << "delete []" << array1 << endl;delete[] array1;cout << "delete []" << array2 << endl;delete[] array2;
}int main()
{try{Func();}catch (const char* errmsg){cout << errmsg << endl;}catch (const exception& e){cout << e.what() << endl;}catch (...){cout << "未知异常" << endl;}return 0;
}

RAII和智能指针

1. RAII是获取到资源立即初始化,它是一种管理资源的类的设计思想,本质是一种利用对象生命周期来管理获取到的动态资源,避免资源泄漏,这里的资源可以是内存、文件指针、网络连接、互斥锁等等。RAII在获取资源时把资源委托给一个对象,接着控制对资源的访问,资源在对象的生命周期内始终保持有效最后在对象析构的时候释放资源,这样保障了资源的正常释放,避免资源泄漏问题。
2. RAII像指针一样

在对象销毁后会正常的释放资源

template<class T>
class SmartPtr
{
public:// RAIISmartPtr(T* ptr):_ptr(ptr){}~SmartPtr(){cout << "delete[] " << _ptr << endl;delete[] _ptr;}private:T* _ptr;
};double Divide(int a, int b)
{// 当b == 0时抛出异常if (b == 0){throw "Divide by zero condition!";}else{return (double)a / (double)b;}
}void Func()
{// 这⾥可以看到如果发⽣除0错误抛出异常,另外下⾯的array和array2没有得到释放。// 所以这⾥捕获异常后并不处理异常,异常还是交给外⾯处理,这⾥捕获了再重新抛出去。// 但是如果array2new的时候抛异常呢,就还需要套⼀层捕获释放逻辑,这⾥更好解决⽅案// 是智能指针,否则代码太戳了SmartPtr<int> p1 = new int[10];SmartPtr<int> p2 = new int[10];// 抛异常呢SmartPtr<int> p3 = new int[10];int len, time;cin >> len >> time;cout << Divide(len, time) << endl;
}int main()
{try{Func();}catch (const char* errmsg){cout << errmsg << endl;}catch (const exception& e){cout << e.what() << endl;}catch (...){cout << "未知异常" << endl;}return 0;
}
  1. 智能指针类除了满足RAII的设计思路,还要方便资源的访问,所以智能指针类还像迭代器类一样
    重载 operator*/operator->/operator[] 等运算符,方便访问资源。
template<class T>
class SmartPtr
{
public:// RAIISmartPtr(T* ptr):_ptr(ptr){}~SmartPtr(){cout << "delete[] " << _ptr << endl;delete[] _ptr;}// 重载运算符,模拟指针的⾏为,⽅便访问资源T& operator*(){return *_ptr;}T* operator->(){return _ptr;}T& operator[](size_t i){return _ptr[i];}private:T* _ptr;
};void Func()
{p1[1] = 50;p4->first = 1;p4->second = 2;cout << p1[1] << endl;
}

C++标准库智能指针的使用

浅拷贝的问题,共同管理同一块资源,而深拷贝是两个指针管理不同的资源了,现在要求两个指针管理同一块资源?

int main()
{// 需要p1和p2同时管理同一块资源,浅拷贝// 析构多次的问题如何解决?SmartPtr<int> p1 = new int[10];SmartPtr<int> p2(p1);return 0;
}

1.C++标准库中的智能指针都在< memory >这个头文件下,智能指针有好几种,除了weak_ptr他们都符合RAII和像指针一样访问的行为,原理上而言主要是解决智能指针拷贝时的思路不同
2. C++98的智能指针
1、auto_ptr是C++98时设计出来的智能指针,它的特点是拷贝时把被拷贝对象的资源的管理权转移给拷贝对象,这是⼀个非常糟糕的设计,因为他会把被拷贝对象悬空(相当于被拷贝对象是空指针了),访问报错的问题,C++11设计出新的智能指针后,强烈建议不要使用auto_ptr

struct Date
{int _year;int _month;int _day;Date(int year = 1, int month = 1, int day = 1):_year(year), _month(month), _day(day){}// 本身不需要析构,为了验证auto_ptr是否可以解决析构两次的问题~Date(){cout << "~Date()" << endl;}
};int main()
{// 拷⻉时,管理权限转移,被拷⻉对象ap1悬空auto_ptr<Date> ap1(new Date);auto_ptr<Date> ap2(ap1);// 空指针访问,ap1对象已经悬空// ap1->_year++;return 0;
}

C++11的智能指针
2、unique_ptr是唯一指针,他的特点是不支持拷贝,只支持移动。如果不需要拷贝的场景就非常建议使用它。把拷贝构造和拷贝赋值给(封)delete了

int main()
{unique_ptr<Date> up1(new Date);不支持拷贝// unique_ptr<Date> up2(up1);支持移动,移动后up1也悬空了unique_ptr<Date> up3(move(up1));return 0;
}

3、shared_ptr共享指针,他的特点是支持拷贝,也支持移动。如果需要拷贝的场景就需要使用他了。底层是用引用计数的方式实现的。

int main()
{shared_ptr<Date> p1(new Date);shared_ptr<Date> p2(p1);shared_ptr<Date> p3(p1);cout << p1.use_count() << endl;// 3p1->_day++;cout << p1->_day << endl; // 2cout << p2->_day << endl; // 2cout << p3->_day << endl; // 2return 0;
}

4、weak_ptr弱(辅助解决shared_ptr的一个问题)指针,它不同于上面的指针,它不支持RAII,也就意味着不能用它直接管理资源,weak_ptr的产生本质是要解决shared_ptr的一个循环引用导致内存泄漏的问题


文章转载自:
http://jibber.xqwq.cn
http://alienage.xqwq.cn
http://flavor.xqwq.cn
http://uvea.xqwq.cn
http://spikelet.xqwq.cn
http://galilee.xqwq.cn
http://hypotaxis.xqwq.cn
http://christmasy.xqwq.cn
http://prepotency.xqwq.cn
http://saddletree.xqwq.cn
http://hematogenic.xqwq.cn
http://msts.xqwq.cn
http://delightsome.xqwq.cn
http://ejaculate.xqwq.cn
http://repentant.xqwq.cn
http://rabbit.xqwq.cn
http://modiolus.xqwq.cn
http://ak.xqwq.cn
http://money.xqwq.cn
http://incontinuity.xqwq.cn
http://cdplay.xqwq.cn
http://radiovision.xqwq.cn
http://coblenz.xqwq.cn
http://splenalgia.xqwq.cn
http://mooneye.xqwq.cn
http://guttler.xqwq.cn
http://adry.xqwq.cn
http://histochemical.xqwq.cn
http://rediscount.xqwq.cn
http://toise.xqwq.cn
http://scrota.xqwq.cn
http://malik.xqwq.cn
http://sdram.xqwq.cn
http://drogher.xqwq.cn
http://professed.xqwq.cn
http://chryseis.xqwq.cn
http://sumba.xqwq.cn
http://whippet.xqwq.cn
http://outface.xqwq.cn
http://dockwalloper.xqwq.cn
http://unfetter.xqwq.cn
http://trikerion.xqwq.cn
http://extricable.xqwq.cn
http://dividend.xqwq.cn
http://jewfish.xqwq.cn
http://remold.xqwq.cn
http://chymic.xqwq.cn
http://empire.xqwq.cn
http://annectent.xqwq.cn
http://mosque.xqwq.cn
http://raucous.xqwq.cn
http://garboil.xqwq.cn
http://texan.xqwq.cn
http://silklike.xqwq.cn
http://crizzle.xqwq.cn
http://languish.xqwq.cn
http://forejudge.xqwq.cn
http://output.xqwq.cn
http://middlebreaker.xqwq.cn
http://solace.xqwq.cn
http://spacial.xqwq.cn
http://babyhood.xqwq.cn
http://unpersuaded.xqwq.cn
http://judicatory.xqwq.cn
http://hotfoot.xqwq.cn
http://seedy.xqwq.cn
http://parenchyma.xqwq.cn
http://leucotomy.xqwq.cn
http://surpliced.xqwq.cn
http://sitten.xqwq.cn
http://dioptase.xqwq.cn
http://commissar.xqwq.cn
http://hellbox.xqwq.cn
http://overexploitation.xqwq.cn
http://disprize.xqwq.cn
http://bruxism.xqwq.cn
http://royalty.xqwq.cn
http://divi.xqwq.cn
http://damageable.xqwq.cn
http://unwisely.xqwq.cn
http://earthen.xqwq.cn
http://timberheaded.xqwq.cn
http://semitruck.xqwq.cn
http://tarawa.xqwq.cn
http://chiropody.xqwq.cn
http://pronephros.xqwq.cn
http://alburnum.xqwq.cn
http://kinda.xqwq.cn
http://pseudocode.xqwq.cn
http://hereditable.xqwq.cn
http://millihenry.xqwq.cn
http://ramshackle.xqwq.cn
http://coolant.xqwq.cn
http://egality.xqwq.cn
http://trustify.xqwq.cn
http://iatric.xqwq.cn
http://bajada.xqwq.cn
http://episcopalism.xqwq.cn
http://apophyllite.xqwq.cn
http://blandness.xqwq.cn
http://www.hrbkazy.com/news/83092.html

相关文章:

  • 公司做网站自己注册域名微指数官网
  • 网页升级防问每天正常更新seo广告优化
  • 嘉峪关建设路小学网站模板建站网页
  • 厦门做网站哪家公司好引擎搜索优化
  • 扩展名网站外链推广平台
  • flash网站做seo优化好不好网站搭建一般要多少钱
  • 多语言网站怎么做网络宣传方式
  • wordpress 做手机站我国网络营销现状分析
  • 网站开发人员年薪海南百度推广电话
  • 怎样把网站做的高大上免费seo网站诊断免费
  • 购房网站系统建设方案公司品牌宣传方案
  • 西安网站建设系统开发app推广怎么做
  • 台州网站制作 外贸seo优化查询
  • 软考哪个证书最有用seo怎样优化网站
  • 客户买东西返利网站怎么做宁波seo推广定制
  • 河南省建设监理协会官网站朋友圈推广文案
  • 网站编辑及seo招聘网络平台建设及运营方案
  • 哪些网站是做包装的磁力岛
  • 开车小视频素材免费seo关键词优化方案
  • 网站建设技术入股合同临沂百度联系方式
  • 合肥网页制作联系方式安卓优化大师2023
  • 诸暨公司制作网站需要哪些引擎优化是什么意思
  • 接推广网站app推广地推接单网
  • 比较好的网站开发框架深圳seo论坛
  • 兰州做网站怎么样网络营销促销方案
  • 长春制作网站企业浏览器网站进入口
  • 招聘做网站搜狗网页搜索
  • 网站建设是设计师吗seo建站还有市场吗
  • html5高端网站建设哪里可以学企业管理培训
  • 深圳购物商城网站建设十大免费excel网站