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

大朗做网站的网站安全建设工作总结

大朗做网站的,网站安全建设工作总结,程序开发是什么工作,xampp 搭建 wordpress关于placement new 在https://blog.csdn.net/qq_42604176/article/details/111997397中已经介绍了placement new的形式。 它的形式为new()/delete().我们将分配好内存的指针送入括号中#xff0c;就完成了初步的调用了。 其实我们可以定义放任何的东西到()内部。只放一个指针…关于placement new 在https://blog.csdn.net/qq_42604176/article/details/111997397中已经介绍了placement new的形式。 它的形式为new()/delete().我们将分配好内存的指针送入括号中就完成了初步的调用了。 其实我们可以定义放任何的东西到()内部。只放一个指针的版本是的new()是标准库先写好给我们的。 我们可以重载operator new并写出多个版本如 Foo* pf new(300,c)Foo; //注意这里没有传入指针前提是每一个版本的声明都必须由独特的参数列其中第一个参数必须是size_t,这是因为当没有()时进行的是new Foo操作Foo的大小会被传进operator new中作为第一参数Foo的大小是个size_t类型。所以我们写的各种各样的版本也必须遵循这个规则。第二第三参数等等可由自己设计。new()括号中的就是第二第三参数他们可以指定placement arguments 为初值。 下面是实例 class Foo { public:Foo() {cout Foo::Foo() endl; };Foo(int) {cout Foo::Foo() endl; throw Bad();} //这里故意抛出异常用来测试 placement operator delete//【1】一般的operator new()的重载void* operator new(size_t size) {return malloc(size);}//【2】这个是标准库已提供的placement new()的重载形式void* operator new(size_t size, void* start) {return start;}//【3】这个是我们重载的 placement new void* operator new(size_t size, long extra) {return malloc(size extra);}//【4】这个也是我们重载的 placement newvoid* operator new(size_t size, long extra, char init) {return malloc(size extra);}//【5】这个也是我们重载的不过我们故意写错定义参数的类型void* operator new(long extra, char init) {return malloc(extra);} //很显然这个版本会报错 };关于placement delete 我们也可以重载placement operator delete并对应着placement operator new写出多个对应版本但他们绝对不会被delete调用。 只有当new所调用的ctor抛出异常才会调用这些重载版本的operator delete。 也就是说重载的placement operator delete是用来释放未能成功创建的对象所占的内存。正如我们所知创建一个对象实际上是先申请空间再调用构造函数。空间申请到了但是对象却没构造出来那么理所当然需要将空间释放 对应上面的四种版本的delete //【1】一般的 operator delete()的重载 void operator delete(void*,size_t) {cout operator delete(void*,size_t) endl; } //【2】对应第二种 void operator delete(void*,void*) {cout operator delete(void*,void*) endl; } //【3】对应第三种 void operator delete(void*,long) {cout operator delete(void*,long) endl; } //【4】对应第四种 void operator delete(void*,long,char) {cout operator delete(void*,long,char) endl; }侯捷老师给出了下面的示例运行到第五种。我们可以发现此时的构造函数调用的是第二种构造函数。在之前的定义中我们在这里抛出了异常。 接下俩便是这几条语句的执行结果 如上所示这些new都被重载了。所以才会打印信息。 按照道理在构造函数抛出异常后会调用自己重载的placement delete打印信息。但在这里并没有这是编译器的原因。 关于basic_string重载new()来扩充申请量 basic_string是标准库里面的一个class就是我们使用的字符串。 如下 template... class basic_string { private:struct Rep {...};...void release() {if(--ref 0) delete this;}inline static void* operator new(size_t,size_t);inline static void operator delete(void*);inline static Rep* create(size_t);... };operator new的具体代码如下 templateclass charT,class traits, class Allocator inline void* basic_stringcharT,traits,Allocator::Rep:: operator new(size_t s,size_t extra) {return Allocator::allocate(s extra * sizeof(charT)); }如何使用看这儿 这里我们把第二参数叫做extra。它的作用是当使用者去创建一个字符串如hello,加上结束符一共6个字符。但是它在分配的时候还会分配extra个字符大小的空间。具体原因不做细究。 templateclass charT,class traits,class Allocator inline basic_stringcharT,traits,Allocator::Rep* basic_stringcharT,traits,Allocator::Rep:: create(size_t extra) {extra frob_size(extra 1);Rep *p new(extra)Rep;...return p; }它的placement delete重载之后则长这样 templateclass charT,class traits,class Allocator inline void basic_stringcharT,traits,Allocator::Rep:: operator delete(void* ptr) {Allocator::deallocate(ptr,sizeof(Rep) reinterpret_castRep*(ptr)-res * sizeof(charT)); }
http://www.sadfv.cn/news/222870/

相关文章:

  • 网站续费贵是重新做个好还是续费大型网站开发合同
  • 企业网站 合同做网站工资高吗
  • 专业刷粉网站wordpress 4 chm
  • 建设一个大型网站大概费用无锡滨湖住房与城乡建设局网站
  • 网站开发 验收移交官网浏览器
  • 新手学做网站要多久信息化建设
  • 46设计网站官网国外游戏商城网站欣赏
  • 做软件下载网站违法吗怎样自己做免费网站
  • 网站开发与设计实训报告心得太原网站制作小程序
  • 永嘉专业网站设计公司新公司名字注册查询
  • 网站备案自己备案和代理备案宁波模版建站公司
  • 建筑网站在哪里找网站建设员的薪水
  • 做网站推广的好处4399网站开发者
  • 网站alt标签百度沈阳分公司地址在哪里
  • 企业网站 生成htmlwordpress注册邮件内容
  • 营销型网站建设818gx番禺招聘网最新信息
  • 网站的建设费计入什么科目北京网站建设公司
  • 公众号微网站制作静态网站如何添加关键词
  • 穹拓做网站织梦园模板网站
  • 关于建设 网站的请示电子公章在线制作网站
  • 网站建设seo推广贵州建设厅考试网站二建成绩
  • 优化公司排名企业网站seo点击软件
  • 潍坊建设公司网站济南网站建设富库网络
  • 网站建设客户资源小程序在建网站吗
  • 在线考试类网站怎么做国内哪里在搞建设
  • 专注合肥网站推广千万不要去做房地产销售
  • 无锡网站建设 微信品牌设计公司深圳
  • 工作期间员工花钱做的网站百度推广怎么做
  • 国家建设人才网站厦门市建设局局长
  • 学校网站设计思路长沙营销型网站制作