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

甘肃高端建设网站做医院网站公司吗

甘肃高端建设网站,做医院网站公司吗,百度快照收录,我想网上卖东西怎么卖智能指针介绍 裸指针 int * p new int(10); *p 30; delete p; 必须要手动释放 智能指针 保证能做到资源的自动释放,利用栈上的对象出作用域自动析构的特征,来做到资源的自动释放的 实现一个简单的智能指针 class Cptr { public:Cptr(T* ptr …

智能指针介绍

裸指针 

int * p = new int(10);

*p = 30;

delete p;

必须要手动释放

智能指针  保证能做到资源的自动释放,利用栈上的对象出作用域自动析构的特征,来做到资源的自动释放的

实现一个简单的智能指针

class Cptr
{
public:Cptr(T* ptr = nullptr):_ptr(ptr){}~Cptr(){delete _ptr;}T& operator*(){return *_ptr;}T* operator->(){return _ptr;}
private:T* _ptr;
};

不带引用计数的智能指针

不带引用计数的智能指针如何解决浅拷贝问题

使用智能指针时需要包含#include <memory>

auto_ptr:C++库里面的

scoped_ptr和unique_ptrC++11新标准里的

auto_ptr<int> p1(new int);
auto_ptr<int> p2(p1);
//auto_ptr永远让最后一个指针管理资源,前面的指针都为空了

不推荐使用auto_ptr,除非场景特变简单

scoped_ptr删除了拷贝构造和赋值运算符重载,所以使用比较少

所以在不带引用计数的智能指针推荐使用unique_ptr,unique_ptr也删除了拷贝构造和赋值运算符重载,但可以用右值引用,提供了带右值引用的拷贝构造和赋值运算符重载,但p1同时也不持有资源了,但会有move刻意提醒了资源的转移

unique_ptr<int> p1(new int);
unique_ptr<int> p2(std::move(p1));

带引用计数的智能指针

shared_ptr和weak_ptr  都是线程安全的

带引用计数:多个智能指针可以管理同一个资源

给每一个对象资源,匹配一个引用计数,当智能指针引用这个资源时,引用计数+1,当智能指针不使用资源的时候,引用计数-1,当引用计数为0时,资源释放

shared_ptr:强智能指针 可以改变资源的引用计数

weak_ptr:弱智能指针 不会改变资源的引用计数 不能使用资源

没有operator* 和operator->运算符重载

weak_ptr观察shared_ptr,shared_ptr观察资源(内存)

强智能指针循环引用(交叉引用)是什么问题?什么结果?怎么解决?

造成new出来的资源无法释放!!!资源泄露问题

#include <iostream>
#include <memory>
using namespace std;
class B;
class A
{
public:A() { cout << "A" << endl; }~A() { cout << "~A" << endl; }shared_ptr<B> _bptr;
};
class B
{
public:B() { cout << "B" << endl; }~B() { cout << "~B" << endl; }shared_ptr<A> _aptr;
};
int main()
{shared_ptr<A> pa(new A());shared_ptr<B> pb(new B());pa->_bptr = pb;pb->_aptr = pa;cout << pa.use_count() << endl;cout << pb.use_count() << endl;return 0;
}

解决办法,定义对象的时候,用强智能指针,引用的地方,用弱智能指针

#include <iostream>
#include <memory>
using namespace std;
class B;
class A
{
public:A() { cout << "A" << endl; }~A() { cout << "~A" << endl; }weak_ptr<B> _bptr;
};
class B
{
public:B() { cout << "B" << endl; }~B() { cout << "~B" << endl; }weak_ptr<A> _aptr;
};
int main()
{shared_ptr<A> pa(new A());shared_ptr<B> pb(new B());pa->_bptr = pb;pb->_aptr = pa;cout << pa.use_count() << endl;cout << pb.use_count() << endl;return 0;
}

如果用通过weak_ptr用引用对象的方法,要先提升weak_ptr

#include <iostream>
#include <memory>
using namespace std;
class B;
class A
{
public:A() { cout << "A" << endl; }~A() { cout << "~A" << endl; }void test(){cout << "好用的方法" << endl;}weak_ptr<B> _bptr;
};
class B
{
public:B() { cout << "B" << endl; }~B() { cout << "~B" << endl; }void func(){shared_ptr<A> ps = _aptr.lock();if (ps != nullptr){ps->test();}}weak_ptr<A> _aptr;
};
int main()
{shared_ptr<A> pa(new A());shared_ptr<B> pb(new B());pa->_bptr = pb;pb->_aptr = pa;pb->func();cout << pa.use_count() << endl;cout << pb.use_count() << endl;return 0;
}

自定义删除器

智能指针:能够保证资源绝对的释放  默认释放方式delete ptr;但有的需要自定义删除器

~unique_ptr(){是一个函数对象的调用 delete(ptr);}

当我们用unique_ptr管理数组时,就需要自定义删除器

#include <iostream>
#include <memory>
using namespace std;
template<typename T>
class Mydatale
{
public:void operator()(T* ptr) const{cout << "自定义删除器" << endl;delete[]ptr;}
};
int main()
{unique_ptr<int, Mydatale<int>> pa(new int[100]);return 0;
}

也可以使用lambda表达式

#include <iostream>
#include <memory>
#include <functional>
using namespace std;
//template<typename T>
//class Mydatale
//{
//public:
//	void operator()(T* ptr) const
//	{
//		cout << "自定义删除器" << endl;
//		delete[]ptr;
//	}
//};
int main()
{unique_ptr<int, function<void(int*)>> pa(new int[100], [](int* p)->void{cout << "自定义删除器" << endl;delete[]p;});return 0;
}

本视频总结自施磊老师的视频。


文章转载自:

http://fnNKdtSx.ppLLj.cn
http://X86qMKh2.ppLLj.cn
http://BjtKGMDJ.ppLLj.cn
http://biiGXD9V.ppLLj.cn
http://7Y31feuK.ppLLj.cn
http://C3VbSPe8.ppLLj.cn
http://qnc9dJ47.ppLLj.cn
http://DJBBqe23.ppLLj.cn
http://sI4qQMzW.ppLLj.cn
http://85hsPnPW.ppLLj.cn
http://z9ZPEs91.ppLLj.cn
http://zz6IWWCE.ppLLj.cn
http://GGt1XStP.ppLLj.cn
http://bW71rfmc.ppLLj.cn
http://kmVRFyul.ppLLj.cn
http://dIjNdpTQ.ppLLj.cn
http://7x6l26KM.ppLLj.cn
http://ofNz3JF4.ppLLj.cn
http://vbFIPa0h.ppLLj.cn
http://0zVxtqjx.ppLLj.cn
http://5TgyqcoN.ppLLj.cn
http://D8yNYfxF.ppLLj.cn
http://OeTgdMEY.ppLLj.cn
http://VZSLhiy0.ppLLj.cn
http://KkRHRGvT.ppLLj.cn
http://CfrZu5TX.ppLLj.cn
http://LIOaI8UO.ppLLj.cn
http://DRO1B0DP.ppLLj.cn
http://0O0Ga6mD.ppLLj.cn
http://SFMlGKuV.ppLLj.cn
http://www.dtcms.com/wzjs/751538.html

相关文章:

  • 网站建设软件哪个好免费的网站加速器
  • 快速做网站前端的视频教程网站云主机吗
  • 上海制作网站学ui设计学费需要多少钱
  • wordpress开启全站ssl棋牌网站建设多少钱
  • 网站建设陕西网页设计制作教程:一个页面的完全制作
  • 万网网站购买网站程序设计软件
  • 厦门建设银行网站首页网站 关键词 出现频率
  • 深圳电子商城网站建设化妆品网页设计模板图片
  • 网站推广的主要途径怎么做家政的网站
  • 网站为什么需要备案号微信开放社区
  • 遵义公司网站制作哪家好优秀网站设计平台
  • 怎样申请做c c 网站h5高端网站建设
  • 网站建设怎么开票泰安网站建设费用
  • 网站空间知识北京营销网站建站公司
  • 网站建设系统哪家便宜些网站商场系统软件
  • 电子商务网站建设知识点总结产品软文范例大全
  • 福州网站建设外包宁波培训网站建设
  • 用html做网站顺序网站默认网站名
  • 上海地区网站备案网络营销是什么课呢
  • wordpress多少钱一年搜索引擎排名优化技术
  • 济源网络推广自动优化app
  • 淘宝联盟 网站怎么做查看网站名称
  • 做网站有2个前提条件 一个是网站官方网站的优势
  • 沈阳有多少网站湖南政务服务网
  • html标签百度seo营销
  • 企业网站项目的流程广州越秀区酒店
  • 常州网站建设方案优化seo外包推广
  • 珠海网站建设维护医疗服务网站素材
  • 网站模板破解下载深圳市网站建设公司设计公司
  • 济南的企业网站邯郸网站设计报价