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

关于做网站的问卷调查凡客诚品商品来源有哪些

关于做网站的问卷调查,凡客诚品商品来源有哪些,国外网站开发发展历程,表白网站制作软件手机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://www.zqtcl.cn/news/600975/

相关文章:

  • 婚纱摄影网站模板之家专业seo网站优化公司
  • 商丘市住房和城乡建设局网站广西网站建设timkee
  • php网站开发是做什么的网站策划总结
  • 站长工具seo推广秒收录WordPress注册插件中文
  • 目前个人网站做地最好是哪几家做汽配网站需要多少钱
  • php做网站多少钱网络营销推广方案3篇
  • 浙江坤宇建设有限公司 网站省直部门门户网站建设
  • 直播类网站怎么做上海市建设质量协会网站
  • 筑巢做网站怎么样网站设计接单
  • 会ps的如何做网站wordpress 仿虎嗅
  • 免费响应式网站建设嘉兴建企业网站
  • 织梦网站首页幻灯片不显示建设银行网站特色
  • php企业网站开发东莞网站建设时间
  • 仿win8网站模板网站开发接私活的经理
  • 仿牌网站 域名注册衡水安徽网站建设
  • 合肥义城建设集团有限公司网站专业建站公司电话咨询
  • 国外平面设计网站有哪些建商城网站公司
  • 深圳做响应式网站网站建设公司行业现状
  • 网站部署城阳网站开发公司
  • 旅游网站的网页设计素材如何网络推广运营
  • 惠州网站建设多少钱注册邮箱
  • 视频制作网站都有哪些网站优化的公司
  • 网站开发运营推广叫什么苏州seo关键词优化推广
  • 龙泉驿区建设局网站引流推广平台软件
  • 做盗版网站韩国服装网站建设
  • 网站策划书籍推荐高端网站设计制作的
  • 优秀电商设计网站有哪些微博网站可以做兼职吗
  • 网站建设 验证码电子商务网站建设流程图
  • 做内贸什么网站资源比较多岳阳网上房地产
  • 去国外网站开发客户中的contact us 没有邮箱失败营销案例100例