最近Qt的blog总结了到底有多少种smart pointer, 下面是一个简要的介绍:

1.   QPointer :提供对指针的保护,当一个指针被删除以后,再使用不会造成野指针或者指针溢出。比如

QPointer<MyObj> obj …;
if(!obj.isNull()) obj->foo;// 成功
… //对象被另外一个线程删除了
if(!obj.isNull()) obj->foo;// 不会造成内存错误,该函数不会被调用

(2009/10/27更正:需要加入if(!obj.isNull()) 进行判断,多谢linkerlin指出)

2.   QSharedDataPointer:提供对数据的COPY-ON-WRITE,提供对数据(注:请区别于指向数据的指针)的线程安全的保护。(注:提供对数据的线程安全保护要结合QsharedData来完成)

3.   QExplicitlySharedDataPointer:类似tr1::shared_ptr,提供对数据的线程安全的保护

4.   QtPatternist::AutoPtr (internal class):其实现的功能已经完全被后面的QscopedPointer替代。

5.   QSharedPointer:类似tr1::shared_ptr,也可以提供线程安全保护,与QSharedDataPointer不同的是,线程安全的保护仅限于指针而不是指针所指的对象数据。

6.   QWeakPointer:类似tr1::weak_ptr伴随QsharedPointer产生,可以提供比QPointer更好的性能

7.   QGuard (internal class): 内部类,主要用来替换QPointer而实现更好的性能

8.   QScopedPointer:类似tr1::auto_ptr,可以很方便的实现RAII,而且提供了一个可以定制的deallocator, 因此使用auto_ptr但是苦于没有办法用delete[]的同学们就有福了。

当然你或许会问为什么不用tr1, boost。这个问题也在blog中被回答了,因此Qt是一个跨平台的库,不能保证每个平台上的编译器都实现了tr1,比如Sun Studio compiler on Solaris (Sun Studio 12, with CC 5.10)仍然只支持C++98以前的标准。当然,还有其他的很多原因,比如风格/缺失某些属性之类的。

需要看详细的内容请到这里:http://labs.trolltech.com/blogs/2009/08/25/count-with-me-how-many-smart-pointer-classes-does-qt-have/

http://blog.csdn.net/aladdina/article/details/4539186

最新文章

  1. 《Java应用程序(Application)》
  2. POJ 3469 Dual Core CPU 最大流
  3. 【摘选引用】在安全的SQL 密码也不过如此
  4. Node.js之Promise
  5. 2014江西理工大学C语言程序竞赛初级组
  6. SpingMvc 中文乱码 post 方式解决方案
  7. 团队作业10--Beta阶段项目复审
  8. APP在模拟器崩溃,提示__gcd_queue_item_enqueue_hook_block_invoke
  9. Mock拦截请求URL返回模板数据
  10. SSL证书安装指引
  11. 命令制作Mac系统U盘启动
  12. [JavaScript] 邮箱验证
  13. day33 线程的创建 验证线程之间共享数据 守护线程 线程进程效率对比 锁 死锁 递归锁
  14. git设置ss代理
  15. Java HttpURLConnection模拟请求Rest接口解决中文乱码问题
  16. Linux系统故障-Repair filesystem
  17. 响应式 Web 设计 - Viewport 和手机变框变粗的问题
  18. 【vlan-hybird】
  19. 浏览器中使用calc不识别
  20. PHP之基本目录操作

热门文章

  1. crm2013 查看下拉框的选项
  2. Oracle自定义类型在C#中调用示例
  3. Spring-data-redis:特性与实例--转载
  4. Ab工具基本使用
  5. SimpleDateFormat的使用问题
  6. 低成本开始互联网创业:探讨域名、服务器、CDN、邮箱等节流之道
  7. 在react底下安装环境
  8. 【Codeforces Round #432 (Div. 1) B】Arpa and a list of numbers
  9. 【AtCoder Beginner Contest 074 A】Bichrome Cells
  10. HDU 5237 Base64