1、上次写的删除器有些问题:
公司主营业务:成都网站设计、成都做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联推出陆港免费做网站回馈大家。
templateclass sp_counted_impl_pd : public sp_counted_base{ public: sp_counted_impl_pd(P p, D d) : ptr(p), del(d){} public: void dispose(){ del(ptr); //就是这里,将对象用作函数!!! } private: P ptr; D del; };
del(ptr) -> del.operator()(ptr);重载了()的类使用起来就是函数对象
删除器:函数对象和函数都可以充当。
2、shared_array
它和shared_ptr类似,它包装了new[]操作符在堆上分配的动态数组,也是采用了引用计数的机制。
shared_array的接口和功能与shared_ptr几乎是相同的,主要区别:
(1)、接受指针p必须是new []的结果
(2)、提供operator[]的重载,可以使用下标
(3)、系统没有提供*、->的重载
(4)、析构函数使用delete [];
3、如何使用shared_array
系统调用:
#include#include using namespace std; using namespace boost; int main(void){ int *p = new int[10]; shared_array pa(p); //共享数组 for(int i = 0; i < 10; i++){ pa[i] = i+1; //系统内进行了[]的重载 } for(i = 0; i < 10; i++){ cout< 4、shared_array
模仿的源码如下:
#ifndef _SHARED_ARRAY_H_ #define _SHARED_ARRAY_H_ #include"checked_delete.h" templateclass shared_array{ public: typedef checked_array_deleter deleter; shared_array(T *p = 0) : px(p), pn(p, deleter()){} //无名对象 ~shared_array(){ } public: T& operator[](int i)const{ return px[i]; } private: T *px; shared_count pn; //必须用到引用计数器对象 }; #endif /////////////////////////////////////////////////////////////////////////////////////////// #ifndef _CHECKED_DELETE_H_ #define _CHECKED_DELETE_H_ template void checked_array_delete(T *x){ delete []x; } template struct checked_array_deleter{ public: void operator()(T *x)const{ checked_array_delete(x); } }; #endif ///////////////////////////////////////////////////////////////////////////////////////////// #include #include"shared_ptr.h" #include"shared_array.h" using namespace std; /* template void checked_array_delete(T *x){ delete []x; } template struct checked_array_deleter{ public: void operator()(T *x)const{ checked_array_delete(x); } }; 写好()的重载之后,就是在shared_counted.h中释放空间时将用到。 del(ptr) -> del.operator()(ptr);重载了()的类使用起来就是函数对象 删除器:函数对象和函数都可以充当。 */ int main(void){ int *p = new int[10]; shared_array pa(p); for(int i = 0; i < 10; i++){ pa[i] = i+1; } for(i = 0; i < 10; i++){ cout< 缺点:(1)、重载使用[]时要小心,shared_array不提供数组的索引范围检查
(2)、所管理的空间是死的,不能够自动增长。
网站栏目:shared_array
本文地址:http://cxhlcq.com/article/iidhjs.html