Qt智能指针
来源:互联网 发布:淘宝问卷调查 编辑:程序博客网 时间:2024/06/06 00:56
std::auto_ptr<QLabel> label(new QLabel("Hello Dbzhang800!"));
- QPointer (4.0) 已经过时,可以被QWeakPointer所替代,它不是线程安全的。
- QSharedDataPointer (4.0) – 提供对数据的COPY-ON-WRITE以及浅拷贝,提供对数据(而不是指向数据的指针)的线程安全的保护。(注:提供对数据的线程安全保护要结合QsharedData来完成),它是线程安全的。
- QSharedPointer (4.5) – 实现了引用计数的可共享资源的强类型指针,它是线程安全的。
- QWeakPointer (4.5) – 实现了引用计数的可共享资源的弱类型指针,它是线程安全的。
- QScopedPointer (4.6) – 实现了非引用计数的独享资源的强类型指针,它是线程安全的。
QSharedPointer有着与std::auto_ptr类似的特性,而最大的区别在于它不能转让所有权而auto_ptr可以。事实上,scoped_ptr永远不能被复制或被赋值!
std::auto_ptr
- 不能让多个auto_ptr 指向同一个对象!(auto_ptr被销毁时会自动删除它指向的对象,这样对象会被删除多次)
- 通过拷贝构造或赋值进行操作时,被拷贝的会自动变成NULL,复制所得的指针将获得资源的唯一所有权
- 智能指针不能指向数组(因为其实现中调用的是delete而非delete[])
- 智能指针不能作为容器类的元素。
在C++0x中,auto_ptr已经不建议使用,以后应该会被其他3个智能指针所取代。
QScopedPointer 与std::unique_ptr
它们概念上应该是是一样的。下面不再区分:
这是一个很类似auto_ptr的智能指针,它包装了new操作符在堆上分配的动态对象,能够保证动态创建的对象在任何时候都可以被正确地删除。但它的所有权更加严格,不能转让,一旦获取了对象的管理权,你就无法再从它那里取回来。
无论是QScopedPointer 还是 std::unique_ptr 都拥有一个很好的名字,它向代码的阅读者传递了明确的信息:这个智能指针只能在本作用域里使用,不希望被转让。因为它的拷贝构造和赋值操作都是私有的,这点我们可以对比QObject及其派生类的对象。
QSharedPointer 与 std::shared_ptr
QSharedPointer 与 std::shared_ptr 行为最接近原始指针,是最像指针的”智能指针”,应用范围比前面的提到的更广。
QSharedPointer 与 QScopedPointer 一样包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针 ,可以被自由地拷贝和赋值,在任意的地方共享它,当没有代码使用(引用计数为0)它时才删除被包装的动态分配的对象。shared_ptr也可以安全地放 到标准容器中,并弥补了std::auto_ptr 和 QScopedPointer 因为转移语义而不能把指针作为容器元素的缺陷。
0 0
- Qt 智能指针学习
- Qt中的智能指针
- Qt 智能指针学习
- Qt 智能指针学习
- Qt 智能指针学习
- Qt 智能指针学习
- Qt智能指针
- Qt 智能指针学习
- Qt中的智能指针
- Qt 智能指针实例
- Qt智能指针
- Qt 智能指针学习
- Qt中的智能指针
- Qt 中的智能指针
- Qt--智能指针
- QT中的智能指针
- Qt里的智能指针
- Qt智能指针学习总结
- centos下安装JDK8的方法
- i am sheetsic
- Linux下Thrift的安装
- eclipse打包遇到的manifest文件丢失等问题解决
- IX Samara Regional Intercollegiate Programming Contest K. Palindromization
- Qt智能指针
- WebForm中使用MVC
- 【案例】华为助力传统广播新媒体转型
- Swift基础(七)类
- Java实现代理ip访问网络的实现方式之Java实现切换ip访问网络资源
- css line-height 探究
- 求C(n,m)%mod
- 未来智能,触摸未来 ---记2016华为开发者大赛沙龙上海站
- Android开源特效常用链接大集合