微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – shared_ptr的基本语法问题

我是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更受欢迎:

>某些(所有?)实现对构造的对象和计数器/删除器使用一个内存分配.这提高了性能.
>这是异常安全的,考虑一个函数采用两个shared_ptrs:

f(shared_ptr<A>(new A),shared_ptr<B>(new B));

由于未定义评估顺序,因此可能的评估可以是:构造A,构造B,初始化share_ptr< A>,初始化shared_ptr< B>.如果B抛出,你会泄漏A.>责任分离.如果shared_ptr负责删除,也要对分配负责.

原文地址:https://www.jb51.cc/c/111473.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐