即使没有启用指针跟踪功能进行代码编译,使用 QSharedPointer 跟踪指针也是安全的。如果编译的代码没有开启指针跟踪功能,QSharedPointer 会从跟踪器中删除指针。 注意,指针跟踪功能对多重继承或虚拟继承有限制(此时两个不同的指针可以引用同一对象)。在这种情况下,如果指针被强制转换为不同的类型并且其值发生更改,则 QS...
代码中出现一个bug,最终发现是由于在某个特殊情况下出现了使用垂悬指针,造成了程序崩溃,进而学习了解了Qt的智能指针机制。 一、悬垂指针的问题 如图,有两个指针a和b指向同一片内存,如果删除其中一个指针a,再去使用指针b的话,程序会崩溃。因为指针b此时已经是一个垂悬指针(Dangling pointer)了,它指向的内存已经被...
QWeakPointer 是为配合 QSharedPointer 而引入的一种智能指针,它更像是 QSharedPointer 的一个助手(因为它不具有普通指针的行为,没有重载operator*和->)。它的最大作用在于协助 QSharedPointer 工作,像一个旁观者一样来观测资源的使用情况。 (转自:https://blog.csdn.net/liyuanbhu/article/details/77825655?utm...
Qt智能指针QSharedPointer与 C++中的std::shared_ptr其作用是一样的,其应用范围比本文说到的QPointer和QScopedPointer更广。 QSharedPointer是一个共享指针,它与 QScopedPointer 一样包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针 ,也就是说,与QScopedPointer不同的是,QSharedPointer可以被自...
C++ Qt面试题67:对C++11 的智能指针了解多少? 01:52 C++ Qt面试题68:show()和exec()的区别? 01:27 C++ Qt面试题69:请讲述Qt的事件循环机制? 05:08 C++ Qt面试题70:讲一下Qt的D指针和Q指针? 01:17 C++ Qt面试题71:如何在Qt中创建自定义控件 01:12 C++ Qt面试题72:讲述Qt信号槽的调用流程...
C++ Qt面试题63:信号与槽与函数指针的比较? 02:33 C++ Qt面试题64:Qt的父子树节点管理机制 01:41 C++ Qt面试题65:什么情况下用指针,什么情况下用引用? 01:38 C++ Qt面试题66:造成内存泄漏的几种情况?如何避免? 00:51 C++ Qt面试题67:对C++11 的智能指针了解多少? 01:52 C++ Qt面试题68:show...
如果没有智能指针,程序员必须保证new对象能在正确的时机delete,四处编写异常捕获代码以释放资源,而智能指针则可以在退出作用域时(不管是正常流程离开或是因异常离开)总调用delete来析构在堆上动态分配的对象。 我们看看Qt家族的智能指针: 注: MSVC2010 和 GCC g++ 4.3 支持 C++0x ...
1. **转换与使用**:在使用弱指针时,通常需要将其转换为强指针以确保访问的对象在使用期间保持有效状态。转换后需进行空指针检查。2. **新建与管理**:在对象创建时,使用QSharedPointer进行封装和管理,可以简化内存管理过程。3. **避免直接删除**:不要直接删除智能指针对象,而是通过其管理的对象...
Qt智能指针--QPointer 概述 QPointer是Qt提供的一个比较特别的智能指针,和其它智能指针有很大的不同,该智能指针专门为自动释放内存资源而设计的。 正文 QPointer本质是一个模板类,属于Qt对象模型的特性,它为QObject提供了guarded pointer,当其指向的对象被销毁时,它会被自动置NULL。
智能指针内部维护了一个引用计数器,当一个智能指针被创建或拷贝时,计数器加1;当一个智能指针被销毁或重置时,计数器减1。当计数器减至0时,智能指针会自动释放其所指向的内存。这种方式称为“所有权”(ownership)模型,智能指针具有其内存的所有权,避免了普通指针中的多个指针指向同一内存地址的情况。