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

做网站内容需要自己填的景县做个油管的网站怎么做

做网站内容需要自己填的,景县做个油管的网站怎么做,合肥电脑培训,广州建网站开发seo型企业网站http://blog.csdn.net/wendy_keeping/article/details/75268687 智能指针的提出#xff1a;智能指针是存储指向动态分配对象指针的类#xff0c;用于生存期控制。能够确保正确销毁动态分配的内存#xff0c;防止内存泄露。 1.智能指针的分类#xff1a; 不带引用计数的智能…http://blog.csdn.net/wendy_keeping/article/details/75268687 智能指针的提出智能指针是存储指向动态分配对象指针的类用于生存期控制。能够确保正确销毁动态分配的内存防止内存泄露。 1.智能指针的分类 不带引用计数的智能指针 auto_ptr unique_ptr scoped_ptr 带引用计数的智能指针 shared_ptr强智能指针 weak_ptr若智能指针 2.不带引用计数的智能指针是如何确保正确释放堆上内存的 auto_ptr auto_ptrA ptr1(new A(10)); auto_ptrA ptr2 ptr1; 12 当这两行代码执行完后ptr1已经不再指向A这个对象并且ptr1NULLptr1对A对象的所有权已经转移给了ptr2也就不能通过ptr1调用该类的方法。 vectorauto_ptrint vec; 不能将auto_ptr类型的指针作为STL容器的元素。因为容器避免不了直接拷贝构造和互相赋值。auto_ptr的这种特性会给STL容器的使用造成很大的麻烦。 unique_ptr unique_ptrA ptr1(new A(10)); unique_ptrA ptr2 ptr1;//error unique_ptrA ptr3 func();//ok unique_ptr不支持拷贝构造函数和赋值运算符重载函数不能隐式的将原指针置为NULL但是可以通过返回值赋值。unique_ptr支持移动构造函数和移动赋值运算符重载函数是通过move(C11标准)函数实现的用户明确知道对象的所有权已经发生转移不能再使用原来的指针调用类的方法。这也是auto_ptr和unique_ptr最根本的区别。 scoped_ptr scoped_ptr不支持所有权的转移只能通过该指针对对象进行操作出作用域会自动析构。 3.带引用计数的智能指针 shared_ptrA pa(new A()); shared_ptrA pb pa; 当使用指针指向堆上的对象时该对象的引用计数加1。拷贝构造或赋值时不产生该对象的副本只是更改对象的引用计数。如果别的智能指针也指向这个对象时也是增加其引用计数。如果delete 指针时先对引用计数减1直到对象的引用计数减为0才调用该对象的析构函数。 4.智能指针的交叉引用导致内存泄露 class A { public:shared_ptrB _pb; }; class B { public:shared_ptrA _pa; };int main() {shared_ptrA pa(new A());shared_ptrB pb(new B());pa-_pb pb;pb-_pa pa;return 0; } pa指针指向堆上对象后A的引用计数是1B的引用计数是1。 pa-_pb pb;此时B的引用计数是2。 pb-_pa pa;此时A的引用计数是2。 出作用域后 pb指针释放B对象的引用计数减1此时B的引用计数是1并不调用B的析构函数。 pa指针释放A对象的引用计数减1此时A的引用计数是1并不调用A的析构函数。 程序运行结束A和B对象并未析构造成内存泄露 为了避免内存泄露必须打断这种循环等待的现象。智能指针提供了weak_ptr弱智能指针可以避免产生循环等待的现象。 weak_ptr当用weak_ptr指向对象时对象的引用计数并不加1因为弱智能指针没有对对象的使用权它只有监控权。 #include iostream #include memory using namespace std;class A { public:weak_ptrB _pb; }; class B { public:shared_ptrA _pa; };int main() {shared_ptrA pa(new A());shared_ptrB pb(new B());pa-_pb pb;pb-_pa pa;return 0; } pa指针指向堆上对象后A的引用计数是1B的引用计数是1。 pa-_pb pb;此时B的引用计数是1。因为A的成员对象是weak_ptr。 pb-_pa pa;此时A的引用计数是2。 出作用域后 pb指针释放B对象的引用计数减1此时B的引用计数是0调用B的析构函数先析构自己B被析构再析构成员对象A的引用计数减1此时A的引用计数是1 pa指针释放A对象的引用计数减1此时A的引用计数是0调用A的析构函数A被析构 为了避免智能指针循环引用造成的内存泄露情况要遵守创建对象的时候一定要用强智能指针其他地方只能用持有资源的弱智能指针。 智能指针本身是线程安全的。使用atomic_increment和atimic_decreament进行对多线程间的互斥保证引用计数count/count–是原子操作。 5.多线程访问共享的C对象产生的线程安全的问题 #include iostream #include memory using namespace std;class C { public:C(){}~C(){}void func(){coutcall func()endl;} };void* threadProc(void *lparg) {shared_ptrC pc (shared_ptrC)lparg;pc-func();//如果对象已经析构则程序崩溃return NULL; }int main(int argc, char* argv[]) {shared_ptrC c(new C());pthread_t tid;pthread_create(tid, NULL, threadProc, c);return 0; } 多线程中可能访问共享的对象如果对象已经析构线程中访问它程序会崩溃掉。解决多线程访问共享的C对象产生的线程安全的问题可以使用weak_ptr。将弱智能指针转给线程再访问对象时先将弱智能和提升为强智能指针如果提升成功则说明对象还存在可以访问该对象的成员变量或方法。如果提升失败则说明对象已经析构。#include iostream #include memory using namespace std;class C { public:C(){}~C(){}void func(){coutcall func()endl;} };void* threadProc(void *lparg) {weak_ptrC pw *(weak_ptrC*)lparg;shared_ptrC pc pw.lock(); //类型提升if(pc ! NULL) //类型提升成功对象未析构{pc-func();}return NULL; }int main(int argc, char* argv[]) {shared_ptrC c(new C());pthread_t tid;weak_ptrC pw(c);pthread_create(tid, NULL, threadProc, pw);return 0; } 创建对象的时候一定要用强智能指针其他地方只能用持有资源的弱智能指针
http://wiki.neutronadmin.com/news/121531/

相关文章:

  • 聊城网站优化案例在线商城网站怎么做
  • 付费网站怎么做门户网站开发方案
  • 苏州姑苏区网站建设建工网官网校
  • 买模板做网站中国营销网官网
  • 上海通信管理局网站关于网站建设的折页广告
  • 15.下面对网站结构描述正确的是( )域名升级系统自动更新
  • 网站 建设在作用是什么网络营销的特点及方式有哪些
  • 金融直播间网站开发企业对企业的网站
  • 网站批量查询深圳最新消息
  • 郑州楼市最新消息厦门网站排名优化费用
  • 定制网站开发哪家好cloudflare做侵权网站
  • 业网站制作新手seo要学多久
  • 网站让女友做网站模特济宁建设工程信息网站
  • 如何与别的网站做友情链接哪有做企业网站
  • 网站开发结语网站建设的大公司好
  • 网络科技公司属于什么行业类别广州seo地址
  • 济南智能网站建设电话网站搭建注意事项
  • 网站营销设计海南百度推广公司
  • 网站动画广告条怎么做的爱企查企业服务平台
  • 瓦房店网站建设怎么查看服务器上的网站
  • 怎么爬虫做网站网站设计与网页配色实例精讲
  • 外贸电子商务网站建设平台常州按天优化代理
  • 公众号绑定网站教程外贸网站解决方案
  • 沈阳建设电商网站网站用户角色
  • 通州企业网站建设ppt模板app
  • 塑胶加工东莞网站建设技术支持国外工业产品设计网站
  • 活动策划网站有哪些网页设计与网站建设课程总结
  • 襄阳市网站搭建公司识图
  • php网站开发是什么意思怎么在网站标题做logo
  • 温州网站制作设计wordpress主题很卡