到底有多少种智能指针(smart pointer)
最近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
到底有多少种智能指针(smart pointer)的更多相关文章
- c/c++ 标准库 智能指针( smart pointer ) 是啥玩意儿
标准库 智能指针( smart pointer ) 是啥玩意儿 一,为什么有智能指针??? c++程序员需要自己善后自己动态开辟的内存,一旦忘了释放,内存就泄露. 智能指针可以帮助程序员"自 ...
- (转)Delphi2009初体验 - 语言篇 - 智能指针(Smart Pointer)的实现
转载:http://www.cnblogs.com/felixYeou/archive/2008/08/27/1277250.html 快速导航 一. 回顾历史二. 智能指针简介三. Delphi中 ...
- 转载:STL四种智能指针
转载至:https://blog.csdn.net/K346K346/article/details/81478223 STL一共给我们提供了四种智能指针: auto_ptr.unique_ptr.s ...
- c++ 中的8种智能指针[转]
一.简介 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete.程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 ...
- stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结
stl中auto_ptr,unique_ptr,shared_ptr,weak_ptr四种智能指针使用总结 1. auto_ptrauto_ptr主要是用来解决资源自动释放的问题,比如如下代码:voi ...
- c++中的四种智能指针
c++中的四种智能指针 写惯了python,golang再来写c++总觉得头大,很大一个原因就是他没有一个GC机制. 不过c++中提供了智能指针,也不是不能用,李姐万岁! auto_ptr, shar ...
- 聊聊 C++ 中的几种智能指针 (下)
一:背景 上一篇我们聊到了C++ 的 auto_ptr ,有朋友说已经在 C++ 17 中被弃用了,感谢朋友提醒,今天我们来聊一下 C++ 11 中引入的几个智能指针. unique_ptr shar ...
- 聊聊 C++ 中的几种智能指针 (上)
一:背景 我们知道 C++ 是手工管理内存的分配和释放,对应的操作符就是 new/delete 和 new[] / delete[], 这给了程序员极大的自由度也给了我们极高的门槛,弄不好就得内存泄露 ...
- 5种智能指针指向数组的方法| 5 methods for c++ shared_ptr point to an array
本文首发于个人博客https://kezunlin.me/post/b82753fc/,欢迎阅读最新内容! 5 methods for c++ shared_ptr point to an array ...
随机推荐
- 在Java中,return null 是否安全, 为什么?
Java代码中return value 为null 是不是在任何情况下都可以,为什么不会throw NullPointerException? Java语言层面:null值自身是不会引起任何问题的.它 ...
- @RequestMapping value 能够反复吗 [
@RequestMapping value 能够反复吗 [问题点数:40分,结帖人wangqiao4j] 不显示删除回复显示全部回复 显示星级回复显示得分回复 仅仅显示楼主 u=http://bbs. ...
- ajax日期參数格式问题
今天遇到ajax传输日期參数后台无法识别的问题,错误异常例如以下. 从异常中能够看出传输到后台的日期数据格式为Thu Aug 13 2015 19:45:20 GMT+0800 (中国标准时间),这样 ...
- matlab无法使用
mathlab前一段时间使用不了,网上找到了一些出来方法. (1)修改本地时间,将本地时间改都较前的时间,就可以了, (2)使用网上的一个文件,将自己的文件替换掉就可以了 文件放在我的百度云盘里面ht ...
- JVM学习:方法重载的优先级
重载:方法名一致,参数长度或者类型不一致. 先放总结,下面为例子 参数具有继承.实现关系,优先考虑子类: 在不考虑对基本类型自动装拆箱(auto-boxing,auto-unboxing),以及可变长 ...
- 请求筛选模块被配置为拒绝包含 hiddenSegment 节的 URL 中的路径
转自原文 请求筛选模块被配置为拒绝包含 hiddenSegment 节的 URL 中的路径. 打开C:\Windows\System32\inetsrv\config路径 找到applicationH ...
- MVC5管道处理模型
原文:MVC5管道处理模型 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/details/82970442 ...
- 常用有效检测数据库运行状态SQL脚本
1.查看数据库中不为 InnoDB 引擎的表 SELECT TABLE_SCHEMA, TABLE_NAME, ENGINE FROM information_schema.TABLES W ...
- Java 开源博客——B3log Solo 0.6.6 正式版发布了!
Java 开源博客 -- B3log Solo 0.6.6 正式版发布了!欢迎大家下载. 该版本引入了数据库连接池:Druid. 另外,欢迎观摩 B3log 团队的新项目:Noty,也非常欢迎大家参与 ...
- Android 添加常驻图标到状态栏
/ * * 如果没有从状态栏中删除ICON,且继续调用addIconToStatusbar,则不会有任何变化.如果将notification中的resId设置不同的图标,则会显示不同的图标 * / p ...