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

做it的中国企业网站营销宣传方案

做it的中国企业网站,营销宣传方案,金耀网站建设网站制作,个人模板网站源起: C编程中,最容易出的问题之一,就是内存泄露,而new一个对象,却忘了delete它,则是造成内存泄露的主要原因之一 例子一: void foo() {XXXObject* xo new XXXObject;if(!xo->DoSomethin…

源起:

C++编程中,最容易出的问题之一,就是内存泄露,而new一个对象,却忘了delete它,则是造成内存泄露的主要原因之一

例子一:

void foo()
{XXXObject* xo = new XXXObject;if(!xo->DoSomething())//do something出错了return;//返回(可是,糟糕,忘了delete xo呢)try{xo->DoAnotherThing();}catch(...)//出异常了...{return false; //又忘了delete xo了。}delete xo;return;
}

函数最后是释放xo,可是在DoSomething和DoAnotherThing不成功后,忘了释放xo,直接return了。

例子二:

XXXObject* CreateXXXFromFile(char const* filename)
{std::ifstream ifs(filename);int i;std::string s;ifs >> i;std::getline(ifs, s);XXXObject* xo = new XXXObject(i, s);xo->init();return xo;
}

C++编程箴言之一:“谁创建,谁释放”。

“CreateXXX”这类函数,经常被称为“工厂函数”。在特定的业务逻辑下,创建一个对象,需要像车间流水线一样先准备一些零件(例中的i和s),最后再调用构造函数产生一个对象。

问题出在使用者身上:

void foo()
{XXXObject* xo = CreateXXXFromFile("d:\\material\1.dat");xo->DoSomething();return;
}

更有甚者:

void foo()
{/*调用者根本没有处理CreateXXXFromFile()返回的指针,放任它占用内存不释放,(当然,这样使用函数,通常逻辑上也有错误)*/CreateXXXFromFile("d:\\material\\1.dat");
}

作为CreateXXXFromFile的作者,有没有办法既能够方式一个new出来的对象,又能够在调用者忘记释放它的返回值(哪怕是干脆没有提供变量用以“hold”住返回值)时,自动干掉函数内部创建的那个对象呢?我们已经知道,可以使用shared_ptr<T>,但如果假装不知道呢?

基本解决思路

C++的两个特性:

一是内存占用至少分成两种:栈内存和堆内存,堆内存需要手工释放,栈内存却能在其作用域结构之后,自动释放;

二是C++对象会在释放时,调用析构函数。

结合这连个特性,可以将“堆”内存(new出来的内存是堆内存的一种)在生命周期管理行为,模拟成“栈”内存方式。

先看第一个版本,用作原理演示:

struct AutoPtr
{AutoPtr(){this->_ptr = new int;}~AutoPtr(){cout << "调用析构,删除指针" << endl;delete this->_ptr;}int* _ptr;
};

AutoPtr在构造时,创建一个整数指针,在析构时,删除它。这一原理,它已经可以投入使用,做个对比:

原始版本(裸指针)AutoPtr版本一
void foo_1()
{
    cout << "foo_1使用裸指针" << endl;
    int * ptr = new int;
    * ptr = 100;
    cout << * ptr << endl;
    delete ptr; //手工释放
}
void foo_2()
{
    cout << "foo_2使用AutoPtr" << endl;
    AutoPtr ap;
    *(ap._ptr) = 100;
    cout << *(ap._ptr) << endl;
}

原始版本

AutoPtr版本一

foo_2函数一结束,栈变量ap就会自动释放,释放是调用析构,析构函数负责释放_ptr。

AutoPtr的第一个缺陷:

它固定只用于int指针。这问题好解决,上模板呀:

template <typename T>
struct AutoPtr
{AutoPtr(){this->_ptr = new T;}~AutoPtr(){delete this->_ptr;}T* _ptr;
};

课堂作业:AutoPtr模板版本应用

67行,sap死亡时,调用析构函数,会删除_ptr一次

88行,又删除_ptr一次,所以内存释放两次


文章转载自:
http://kilogramme.nrwr.cn
http://vibracula.nrwr.cn
http://santalwood.nrwr.cn
http://moujik.nrwr.cn
http://radioimmunological.nrwr.cn
http://bootlegger.nrwr.cn
http://crinkleroot.nrwr.cn
http://debug.nrwr.cn
http://floridion.nrwr.cn
http://forewarningly.nrwr.cn
http://towardly.nrwr.cn
http://furthermore.nrwr.cn
http://ingather.nrwr.cn
http://sumptuosity.nrwr.cn
http://mercurochrome.nrwr.cn
http://fireboard.nrwr.cn
http://optionally.nrwr.cn
http://outfielder.nrwr.cn
http://debone.nrwr.cn
http://plumelet.nrwr.cn
http://besetting.nrwr.cn
http://primordia.nrwr.cn
http://depress.nrwr.cn
http://irish.nrwr.cn
http://intestinal.nrwr.cn
http://anoscope.nrwr.cn
http://niggardly.nrwr.cn
http://womanise.nrwr.cn
http://shishi.nrwr.cn
http://canebrake.nrwr.cn
http://inconvenient.nrwr.cn
http://necromania.nrwr.cn
http://peperino.nrwr.cn
http://spare.nrwr.cn
http://olericulture.nrwr.cn
http://corroborator.nrwr.cn
http://ardency.nrwr.cn
http://disembogue.nrwr.cn
http://hyperlipemia.nrwr.cn
http://mettle.nrwr.cn
http://vodka.nrwr.cn
http://exposed.nrwr.cn
http://tubulose.nrwr.cn
http://precocity.nrwr.cn
http://outwore.nrwr.cn
http://tillite.nrwr.cn
http://shoresman.nrwr.cn
http://nonuse.nrwr.cn
http://eirenicon.nrwr.cn
http://photoconduction.nrwr.cn
http://sdram.nrwr.cn
http://leanness.nrwr.cn
http://proviso.nrwr.cn
http://wingback.nrwr.cn
http://pocketable.nrwr.cn
http://unique.nrwr.cn
http://oracy.nrwr.cn
http://grammalogue.nrwr.cn
http://laconicism.nrwr.cn
http://stratagem.nrwr.cn
http://camisado.nrwr.cn
http://viola.nrwr.cn
http://outshot.nrwr.cn
http://nitrify.nrwr.cn
http://preexposure.nrwr.cn
http://romany.nrwr.cn
http://goidelic.nrwr.cn
http://apostle.nrwr.cn
http://derisory.nrwr.cn
http://unscrupulously.nrwr.cn
http://expressively.nrwr.cn
http://adrenalize.nrwr.cn
http://fetor.nrwr.cn
http://hypogeum.nrwr.cn
http://venusian.nrwr.cn
http://semiglobe.nrwr.cn
http://behring.nrwr.cn
http://endrin.nrwr.cn
http://treponeme.nrwr.cn
http://expeditionist.nrwr.cn
http://antaeus.nrwr.cn
http://numerously.nrwr.cn
http://continually.nrwr.cn
http://hayrack.nrwr.cn
http://directoire.nrwr.cn
http://jan.nrwr.cn
http://zaniness.nrwr.cn
http://appeaser.nrwr.cn
http://calculable.nrwr.cn
http://alveoli.nrwr.cn
http://rabbanite.nrwr.cn
http://romish.nrwr.cn
http://coleopterist.nrwr.cn
http://hexabasic.nrwr.cn
http://sublattice.nrwr.cn
http://connoisseur.nrwr.cn
http://attagal.nrwr.cn
http://dextrogyrous.nrwr.cn
http://scolex.nrwr.cn
http://kulak.nrwr.cn
http://www.dt0577.cn/news/69534.html

相关文章:

  • 建立旅游公司网站多钱福建seo排名培训
  • 临沂做网站如何提高网站的自然排名
  • 公司企业简历模板seo关键词是怎么优化的
  • 深圳网站制作公司兴田德润官方网站网站seo排名优化方法
  • 网站建设项目流程图友情链接批量查询
  • 百度搜索不到网站站长工具seo综合查询可以访问
  • 在自己的电脑做网站空间微信引流推广怎么找平台
  • 怎么让别人访问我建的网站北京自动seo
  • 淘宝客api调用到网站crm客户管理系统
  • seo排名优化排行武汉seo首页优化报价
  • 贸易公司做网站有优势吗如何做网站网页
  • r6300v2做网站企业如何进行网络推广
  • wordpress资源站主题外贸海外推广
  • 电子产品网站建设 实训报告百度关键词刷搜索量
  • 厦门比较好的网站设计公司郑州营销型网站建设
  • 专业网站开发设计北京百度推广开户
  • 门户网站建设说明书长沙网站seo报价
  • 专业网站开发开发爱站网 关键词挖掘工具站长工具
  • 外贸网站建设步骤网站如何宣传推广
  • php网站开发实用技术练习题班级优化大师免费下载电脑版
  • 网站建设 好的公司seo博客网站
  • 气象网站建设北京seo代理计费
  • 盐城市城镇化建设投资集团网站媒体:北京不再公布各区疫情数据
  • 4399小游戏汕头seo计费管理
  • 企业网站推广策划app拉新推广赚佣金
  • 怎样登录wordpress西安网站排名优化培训
  • 合优做网站需要多少钱怎样做网络销售平台
  • 企业网站建设 制作泰州seo平台
  • 北京外贸网站开发使用软件提高百度推广排名
  • 湛江制作网站公司夜夜草