make_shared() shared_prt()详解区别
来源:互联网 发布:淘宝包邮券怎么设置 编辑:程序博客网 时间:2024/05/13 12:12
shared_ptr很好地消除了显式的delete调用,如果读者掌握了它的用法,可以肯定delete将会在你的编程字典中彻底消失 。
但这还不够,因为shared_ptr的构造还需要new调用,这导致了代码中的某种不对称性。虽然shared_ptr很好地包装了new表达式,但过多的显式new操作符也是个问题,它应该使用工厂模式来解决。
因此,shared_ptr在头文件<boost/make_shared.hpp> 中提供了一个自由工厂函数(位于boost名字空间)make_shared<T>(),来消除显式的new调用,它的名字模仿了标准库的 make_pair(),声明如下:
- template<class
T, >class... Args -
shared_ptr make_shared( Args && ... args );
make_shared()函数可以接受最多10个参数,然后把它们传递给类型T的构造函数,创建一个shared_ptr<T>的对 象并返回。make_shared()函数要比直接创建shared_ptr对象的方式快且高效,因为它内部仅分配一次内存,消除了shared_ptr 构造时的开销。
下面的代码示范了make_shared()函数的用法:
- #include
<boost/make_shared.hpp> - int
main() - {
-
shared_ptr sp = -
//创建string的共享指针 -
shared_ptr > spv = -
>(10, 2);
//创建vector的共享指针 -
assert(spv- == 10); - }
- #include <boost/smart_ptr.hpp>
- int main()
- {
- boost::shared_ptr<string> sp(new string("shared_ptr"));
- cout << *sp << endl;
- cout << sp->size() << endl;
- }
make_shared()不能接受任意多数量的参数构造对象,一般情况下这不会成为问题。实际上,很少有如此多的参数的函数接口,即使有,那也会是一个设计的不够好的接口,应该被重构。
除了make_shared(),smart_ptr库还提供一个allocate_shared(),它比make_ shared()多接受一个定制的内存分配器类型参数,其他方面都相同。
- make_shared() shared_prt()详解区别
- make_shared和shared_ptr的区别
- make_shared && shared_ptr
- boost::make_shared
- boost::make_shared
- std::make_shared
- std::make_shared有啥用
- boost::shared_ptr boost::make_shared
- std::make_shared解释。。。。
- std::make_shared有啥用
- shared_ptr与make_shared的用法
- 智能指针之make_unique与make_shared
- C++11使用make_shared的优势和劣势
- C++11使用make_shared的优势和劣势
- SQL2005版本区别详解
- GET POST 区别详解
- GET POST 区别详解
- GET POST 区别详解
- 黑马程序员——注解
- UVA11361 递推关系
- 挂载点
- CoreImage的使用及常见滤镜工具(一)
- acm 1011 Sticks
- make_shared() shared_prt()详解区别
- 下载Linux镜像的好地方
- css的效率和浏览器渲染的速度
- 冒泡排序(BubbleSort)
- 编写设计一个People(人)类。该类的数据成员有年龄(age)、身高(height)、体重(weight)和人数(num),其中人数为静态数据成员
- STL中迭代器
- 给Ubuntu安装Windows的字体
- 定义一个描述学生(Student)基本情况的类,数据成员包括姓名(name)、学号(num)、数学成绩(mathScore)、英语成绩(englishScore)、人数(count)、数学总成绩(ma
- Git: Why 'Everything up-to-date' when pushing