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

深圳网站建设网络推广seo系统培训

深圳网站建设网络推广,seo系统培训,宜宾网站开发招聘,c做项目的网站此头文件是动态内存管理库的一部分。std::unique_ptr 是一种智能指针,它通过指针持有并管理另一对象,并在 unique_ptr 离开作用域时释放该对象。在发生下列两者之一时,用关联的删除器释放对象: 管理它的 unique_ptr 对象被销毁。…

此头文件是动态内存管理库的一部分。std::unique_ptr 是一种智能指针,它通过指针持有并管理另一对象,并在 unique_ptr 离开作用域时释放该对象。在发生下列两者之一时,用关联的删除器释放对象:

  • 管理它的 unique_ptr 对象被销毁。
  • 通过 operator= 或 reset() 赋值另一指针给管理它的 unique_ptr 对象。

成员函数

(构造函数)

构造新的 unique_ptr
(公开成员函数)

(析构函数)

析构所管理的对象,如果存在的话
(公开成员函数)

operator=

unique_ptr 赋值
(公开成员函数)
修改器

release

返回一个指向被管理对象的指针,并释放所有权
(公开成员函数)

reset

替换被管理对象
(公开成员函数)

swap

交换被管理对象
(公开成员函数)
观察器

get

返回指向被管理对象的指针
(公开成员函数)

get_deleter

返回用于析构被管理对象的删除器
(公开成员函数)

operator bool

检查是否有关联的被管理对象
(公开成员函数)
单对象版本,unique_ptr<T>

operator*operator->

解引用指向被管理对象的指针
(公开成员函数)
数组版本,unique_ptr<T[]>

operator[]

提供到被管理数组的有索引访问
(公开成员函数)

代码示例:

#include <iostream>
#include <memory>// unique_ptr deleter with state
class state_deleter {int count_;
public:state_deleter():count_(0) {}template<class T>void operator()(T* p) {std::cout << "[deleted #" << ++count_ << "]\n";delete p;}
};struct C{int a;int b;
};int main()
{// unique_ptr constructor examplestd::default_delete<int> d;std::unique_ptr<int> u1;std::unique_ptr<int> u2(nullptr);std::unique_ptr<int> u3(new int);std::unique_ptr<int> u4(new int, d);std::unique_ptr<int> u5(new int, std::default_delete<int>());std::unique_ptr<int> u6(std::move(u5));std::unique_ptr<int> u7(std::move(u6));std::unique_ptr<int> u8(std::auto_ptr<int>(new int));std::cout << "u1: " << (u1 ? "not null" : "null") << '\n';std::cout << "u2: " << (u2 ? "not null" : "null") << '\n';std::cout << "u3: " << (u3 ? "not null" : "null") << '\n';std::cout << "u4: " << (u4 ? "not null" : "null") << '\n';std::cout << "u5: " << (u5 ? "not null" : "null") << '\n';std::cout << "u6: " << (u6 ? "not null" : "null") << '\n';std::cout << "u7: " << (u7 ? "not null" : "null") << '\n';std::cout << "u8: " << (u8 ? "not null" : "null") << '\n';// unique_ptr destructor exampleauto deleter = [](int *p) {delete p;std::cout << "deleter called\n";};std::unique_ptr<int, decltype(deleter)> foo(new int, deleter);std::cout << "foo " << (foo ? "is not" : "is") << " empty\n";// unique_ptr::operator= examplestd::unique_ptr<int> foo2;std::unique_ptr<int> bar2{ nullptr };foo2 = std::unique_ptr<int>(new int(101));  // rvaluebar2 = std::move(foo2);                       // using std::movestd::cout << "foo2: ";if (foo2)std::cout << *foo2 << '\n';elsestd::cout << "empty\n";std::cout << "bar2: ";if (bar2)std::cout << *bar2 << '\n';elsestd::cout << "empty\n";// unique_ptr::get vs unique_ptr::release//foo3	bar3	p3std::unique_ptr<int> foo3;				//nullstd::unique_ptr<int> bar3;				//null	nullint *p3 = nullptr;						//null	null	nullstd::cout << "foo3: ";if(foo3) std::cout << *foo3 << '\n';else std::cout << "(null)\n";std::cout << "bar3: ";if(bar3) std::cout << *bar3 << '\n';else std::cout << "(null)\n";std::cout << "p3: ";if(p3) std::cout << *p3 << '\n';else std::cout << "(null)\n";std::cout << '\n';foo3 = std::unique_ptr<int>(new int(10));	//(10)	null	nullbar3 = std::move(foo3);						//null  (10)	nullp3 = bar3.get();							//null	(10)	(10)*p3 = 20;									//null	(20)	(20)p3 = nullptr;								//null	(20)	nullstd::cout << "foo3: ";if (foo3) std::cout << *foo3 << '\n';else std::cout << "(null)\n";std::cout << "bar3: ";if (bar3) std::cout << *bar3 << '\n';else std::cout << "(null)\n";std::cout << "p3: ";if (p3) std::cout << *p3 << '\n';else std::cout << "(null)\n";std::cout << '\n';foo3 = std::unique_ptr<int>(new int(30));	//(30)	(20)	nullp3 = foo3.release();						//null	(20)	(30)*p3 = 40;									//null	(20)	(40)std::cout << "foo3: ";if (foo3) std::cout << *foo3 << '\n';else std::cout << "(null)\n";std::cout << "bar3: ";if (bar3) std::cout << *bar3 << '\n';else std::cout << "(null)\n";std::cout << "p3: ";if (p3) std::cout << *p3 << '\n';else std::cout << "(null)\n";std::cout << '\n';delete p3;   // unique_ptr::get_deleter examplestate_deleter del;std::unique_ptr<int> p; //使用默认的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...\n";gamma.get_deleter() = state_deleter();//新的deleter// additional deletions when unique_ptr objects reach out of scope (in inverse order of declaration)// example of unique_ptr::operator boolstd::unique_ptr<int> foo4;std::unique_ptr<int> bar4(new int(12));if(foo4) std::cout << "foo4 points to " << *foo4 << '\n';else std::cout << "foo4 is empty\n";if(bar4) std::cout << "bar4 points to " << *bar4 << '\n';else std::cout << "bar4 is empty\n";// unique_ptr::swap examplestd::unique_ptr<int> foo5(new int(10));std::unique_ptr<int> bar5(new int(20));std::cout << "foo5:" << *foo5 << '\n';std::cout << "bar5:" << *bar5 << '\n';foo5.swap(bar5);std::cout << "foo5:" << *foo5 << '\n';std::cout << "bar5:" << *bar5 << '\n';// unique_ptr::operator*std::unique_ptr<int> foo6(new int);std::unique_ptr<int> bar6(new int(100));std::cout << "foo6: " << *foo6 << '\n';std::cout << "bar6: " << *bar6 << '\n';*foo6 = *bar6 * 2;std::cout << "foo6: " << *foo6 << '\n';std::cout << "bar6: " << *bar6 << '\n';// unique_ptr::operator->std::unique_ptr<C> foo7(new C);std::unique_ptr<C> bar7;foo7->a = 10;foo7->b = 20;bar7 = std::move(foo7);if (foo7) std::cout << "foo7: " << foo7->a << ' ' << foo7->b << '\n';if (bar7) std::cout << "bar7: " << bar7->a << ' ' << bar7->b << '\n';// unique_ptr::operator[]std::unique_ptr<int[]> foo8(new int[5]);for (int i = 0; i < 5; ++i) foo8[i] = i;for (int i = 0; i < 5; ++i)std::cout << foo8[i] << ' ';std::cout << '\n';return 0;
}

运行效果:

参考:

https://cplusplus.com/reference/memory/

https://zh.cppreference.com/w/cpp/header/memory

http://www.hkea.cn/news/649847/

相关文章:

  • 制冷机电工程东莞网站建设简阳seo排名优化培训
  • 北京网站建设 网站维护服装营销方式和手段
  • 唐山高端网站建设开发新客户的十大渠道
  • 小地方的旅游网站怎么建设seo教程有什么
  • 做网站教程宁波百度seo点击软件
  • asp.net个人网站北京专门做seo
  • 石家庄java开发做网站百度资源站长平台
  • 有哪些网站系统网络营销首先要进行
  • 网站建设硬件设置竞价广告是怎么推广的
  • 网站的平面设计图用ps做国外搜索引擎大全百鸣
  • 深圳专业企业网站建设前端培训
  • 南京平台公司seo搜索培训
  • 横沥网站建设武汉百度百科
  • 百度给做网站公司线上运营的5个步骤
  • 盘锦网站建设公司网络营销策略包括哪些
  • 简述电子商务网站开发的基本原则一站式网络营销
  • 商丘网站网络推广员的工作内容和步骤
  • 取消wordpress邮箱认证北京搜索优化排名公司
  • 千库网素材南宁seo优势
  • 西安机场商务宾馆百度做网站怎么在百度上做网站
  • ps网站建设seo网络公司
  • 网站建设步骤 教 程网站怎么做谷歌推广
  • 网站制作需要注意什么潍坊做网站哪家好
  • 专门做团购的网站有哪些色盲图
  • 百度做网站续费费用百度营业执照怎么办理
  • 深圳网站建设方维网络企业网站制作要求
  • 制作好网站黑帽seo教程
  • 云南 网站建设网站seo优化对网店的推广的作用为
  • 网站建设免费国外舆情服务公司
  • 怎么做网站banner查排名网站