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

网站域名备案与不备案的区别软文广告是什么意思

网站域名备案与不备案的区别,软文广告是什么意思,黄骅市找工作,政府网站建设团队原文转载于:https://blog.csdn.net/wangshubo1989/article/details/50408182unique_ptr的成员函数在上一篇博客中几乎全部涵盖,其实还有一个很有踢掉,即std::unique_ptr::get_deleter 字面已经很明显了,就获得deleter: Returns th…

原文转载于:https://blog.csdn.net/wangshubo1989/article/details/50408182

unique_ptr的成员函数在上一篇博客中几乎全部涵盖,其实还有一个很有踢掉,即std::unique_ptr::get_deleter

字面已经很明显了,就获得deleter: 
Returns the stored deleter

The stored deleter is a callable object. A functional call to this object with a single argument of member type pointer is expected to delete the managed object, and is automatically called when the unique_ptr is itself destroyed, assigned a new value, or resetted while non-empty.

直接看例子:

#include <iostream>
#include <memory>class state_deleter {  // a deleter class with stateint count_;
public:state_deleter() : count_(0) {}template <class T>void operator()(T* p) {std::cout << "[deleted #" << ++count_ << "]\n";delete p;}
};int main() {state_deleter del;std::unique_ptr<int> p;   // uses default deleter// alpha and beta use independent copies of the deleter:std::unique_ptr<int, state_deleter> alpha(new int);std::unique_ptr<int, state_deleter> beta(new int, alpha.get_deleter());return 0;
}

运行程序,输出结果: 
[deleted #1] 
[deleted #1] 
说明了,在函数结束的时候,alpha beta的析构函数被调用了,而且析构函数是我们自己定义的类。

在上面的代码上加入对alpha beta的操作:

int main() {state_deleter del;std::unique_ptr<int> p;   // uses default deleter// alpha and beta use independent copies of the deleter:std::unique_ptr<int, state_deleter> alpha(new int);std::unique_ptr<int, state_deleter> beta(new int, alpha.get_deleter());std::cout << "resetting alpha..."; alpha.reset(new int);std::cout << "resetting beta..."; beta.reset(new int);return 0;
}

输出: 
resetting alpha…[deleted #1] 
resetting beta…[deleted #1] 
[deleted #2] 
[deleted #2] 
说明在reset方法后,也调用了自定义的析构~

再继续添加代码:


#include <iostream>
#include <memory>class state_deleter {  // a deleter class with stateint count_;
public:state_deleter() : count_(0) {}template <class T>void operator()(T* p) {std::cout << "[deleted #" << ++count_ << "]\n";delete p;}
};int main() {state_deleter del;std::unique_ptr<int> p;   // uses default deleter// alpha and beta use independent copies of the deleter:std::unique_ptr<int, state_deleter> alpha(new int);std::unique_ptr<int, state_deleter> beta(new int, alpha.get_deleter());// gamma and delta share the deleter "del" (deleter type is a reference!):std::unique_ptr<int, state_deleter&> gamma(new int, del);std::unique_ptr<int, state_deleter&> delta(new int, gamma.get_deleter());std::cout << "resetting alpha..."; alpha.reset(new int);std::cout << "resetting beta..."; beta.reset(new int);std::cout << "resetting gamma..."; gamma.reset(new int);std::cout << "resetting delta..."; delta.reset(new int);return 0;
}

输出: 
resetting alpha…[deleted #1] 
resetting beta…[deleted #1] 
resetting gamma…[deleted #1] 
resetting delta…[deleted #2] 
[deleted #3] 
[deleted #4] 
[deleted #2] 
[deleted #2] 
这里我们重点关注delta,这里使用的是按引用传递。 
还有一个地方需要说明: 
析构的顺序与构造的顺序相反~~

go on:


#include <iostream>
#include <memory>class state_deleter {  // a deleter class with stateint count_;
public:state_deleter() : count_(0) {}template <class T>void operator()(T* p) {std::cout << "[deleted #" << ++count_ << "]\n";delete p;}
};int main() {state_deleter del;std::unique_ptr<int> p;   // uses default deleter// alpha and beta use independent copies of the deleter:std::unique_ptr<int, state_deleter> alpha(new int);std::unique_ptr<int, state_deleter> beta(new int, alpha.get_deleter());// gamma and delta share the deleter "del" (deleter type is a reference!):std::unique_ptr<int, state_deleter&> gamma(new int, del);std::unique_ptr<int, state_deleter&> delta(new int, gamma.get_deleter());std::cout << "resetting alpha..."; alpha.reset(new int);std::cout << "resetting beta..."; beta.reset(new int);std::cout << "resetting gamma..."; gamma.reset(new int);std::cout << "resetting delta..."; delta.reset(new int);//std::cout << "calling gamma/delta deleter...";gamma.get_deleter()(new int);alpha.get_deleter() = state_deleter(); // a brand new deleter for alpha// additional deletions when unique_ptr objects reach out of scope// (in inverse order of declaration)return 0;
}

此时输出: 
//输出: 
//resetting alpha…[deleted #1] 
//resetting beta…[deleted #1] 
//resetting gamma…[deleted #1] 
//resetting delta…[deleted #2] 
//calling gamma / delta deleter… 
//[deleted #3] 
//[deleted #4] 
//[deleted #5] 
//[deleted #2] 
//[deleted #1]

最后再来一个:

#include <iostream>  
#include <memory>  using namespace std;void deleter(int* ptr) {delete ptr;ptr = nullptr;std::clog << "shared_ptr delete the pointer." << std::endl;
}int main(void) {//定义函数类型  typedef void(*tp) (int*);typedef decltype (deleter)* dp;using up = void(*) (int*);std::shared_ptr<int> spi(new int(10), deleter);std::shared_ptr<int> spi2(new int, deleter);spi2 = std::make_shared<int>(15);std::cout << "*spi = " << *spi << std::endl;std::cout << "*spi2 = " << *spi2 << std::endl;//unique_ptr是模板函数需要删除器(deleter)类型, 再传入具体的删除器  std::unique_ptr<int, decltype(deleter)*> upi(new int(20), deleter);std::unique_ptr<int, tp> upi2(new int(25), deleter);std::unique_ptr<int, dp> upi3(new int(30), deleter);std::unique_ptr<int, up> upi4(new int(35), deleter);std::cout << "*upi = " << *upi << std::endl;std::cout << "*upi2 = " << *upi2 << std::endl;std::cout << "*upi3 = " << *upi3 << std::endl;std::cout << "*upi4 = " << *upi4 << std::endl;return 0;}
//输出:
//shared_ptr delete the pointer.
//*spi = 10
//* spi2 = 15
//* upi = 20
//* upi2 = 25
//* upi3 = 30
//* upi4 = 35
//shared_ptr delete the pointer.
//shared_ptr delete the pointer.
//shared_ptr delete the pointer.
//shared_ptr delete the pointer.
//shared_ptr delete the pointer.

只是分析这两句:

std::shared_ptr<int> spi2(new int, deleter);
spi2 = std::make_shared<int>(15);

这时候会调用deleter删除器!


http://www.lbrq.cn/news/2422423.html

相关文章:

  • 网站设计与管理的软件怎么做网络宣传推广
  • wordpress上传大小限制东莞网络推广优化排名
  • wordpress会员计时重庆黄埔seo整站优化
  • wordpress调整侧边栏的高度百度seo和sem
  • 网站做电话线用二十四个关键词
  • 网站建设教程 冰美人视频网络推广费计入什么科目
  • 做包皮医院网站百度手机版下载
  • 陕西 网站建设sem优化师是做什么的
  • 新手做网站做什么样的竞价被恶意点击怎么办
  • 做网站用什么系统好竞价广告
  • 郑州的做网站公司天津seo技术教程
  • 厦门网站建设哪家公司好关键词seo排名怎么样
  • 商洛网站制作seo合作
  • 免费企业建站系统排名360搜索优化
  • 驾校一点通网站怎么做电商网站排名
  • 网站建设和编程的区别丽水百度seo
  • 做网站建设的公司有哪些内容品牌营销成功案例
  • 网站备案后 如何建设长沙百家号seo
  • 湖北网站建设 鄂 icp长春seo顾问
  • 长春建设集团网站百度搜索引擎收录
  • 微信对接网站可以做301跳转吗今日百度小说排行榜风云榜
  • 西安高校定制网站建设公司推荐电商网站规划
  • 企业网站搭建哪家好新闻源发稿平台
  • 动软代码生成器 做网站网站百度不收录
  • 北京通州网站建设石家庄网络seo推广
  • 网站建设标准规范济南谷歌推广
  • 杭州企业网站优化哪家公司建设网站好
  • 衡水做网站开发的百度怎么发自己的小广告
  • 网站后台密码忘了怎么办今日头条新闻大事件
  • 上海网站建设lv cn在线bt磁力搜索
  • 学习pwn需要的基本汇编语言知识
  • 【金仓数据库产品体验官】_KingbaseES(SQLServer兼容版)保姆级安装教程
  • ASP .NET Core 8高效集成Redis缓存实战
  • Node.js worker_threads 性能提升
  • jQuery多库共存
  • 数据结构 | 栈:构建高效数据处理的基石