c – shared_ptr的基本语法问题
发布时间:2020-12-16 03:25:49 所属栏目:百科 来源:网络整理
导读:我是shared_ptr的新手.我有几个关于C 0x shared_ptr语法的问题如下: //first questionshared_ptrclassAptr(new classA()); //worksshared_ptrclassAptr;ptr = ?? //how could I create a new object to assign it to shared pointer?//second questionshare
我是shared_ptr的新手.我有几个关于C 0x shared_ptr语法的问题如下:
//first question shared_ptr<classA>ptr(new classA()); //works shared_ptr<classA>ptr; ptr = ?? //how could I create a new object to assign it to shared pointer? //second question shared_ptr<classA>ptr2; //could be tested for NULL from the if statement below shared_ptr<classA> ptr3(new classA()); ptr3 = ?? //how could I assign NULL again to ptr3 so that the if statement below becomes true? if(!ptr3) cout << "ptr equals null"; 解决方法shared_ptr<classA> ptr; ptr = shared_ptr<classA>(new classA(params)); // or: ptr.reset(new classA(params)); // or better: ptr = make_shared<classA>(params); ptr3 = shared_ptr<classA>(); // or ptr3.reset(); 编辑:总结一下为什么make_shared比显式调用new更受欢迎: >某些(所有?)实现对构造的对象和计数器/删除器使用一个内存分配.这提高了性能. f(shared_ptr<A>(new A),shared_ptr<B>(new B)); 由于未定义评估顺序,因此可能的评估可以是:构造A,构造B,初始化share_ptr< A>,初始化shared_ptr< B>.如果B抛出,你会泄漏A.>责任分离.如果shared_ptr负责删除,也要对分配负责. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |