代码中出现一个bug,最终发现是由于在某个特殊情况下出现了使用垂悬指针,造成了程序崩溃,进而学习了解了Qt的智能指针机制。 一、悬垂指针的问题 如图,有两个指针a和b指向同一片内存,如果删除其中一个指针a,再去使用指针b的话,程序会崩溃。因为指针b此时已经是一个垂悬指针(Dangling pointer)了,它指向的内存已经被...
QPointer 是 Qt 框架提供的一种智能指针,用于安全地处理对象的生命周期,并在对象销毁后将指针置空,防止悬垂指针的问题。 QPointer 主要用于在持有对象的弱引用的同时能够检测对象是否已被销毁。通过 QPointer,即使持有一个对象的指针,也可以确保在对象被删除后,该指针会被自动置空。这样,在使用 QPointer 指针时,可...
Qt智能指针--QPointer 概述 QPointer是Qt提供的一个比较特别的智能指针,和其它智能指针有很大的不同,该智能指针专门为自动释放内存资源而设计的。 正文 QPointer本质是一个模板类,属于Qt对象模型的特性,它为QObject提供了guarded pointer,当其指向的对象被销毁时,它会被自动置NULL。 需要注意的是:QPointer所指向的...
如果没有智能指针,程序员必须保证new对象能在正确的时机delete,四处编写异常捕获代码以释放资源,而智能指针则可以在退出作用域时(不管是正常流程离开或是因异常离开)总调用delete来析构在堆上动态分配的对象。 我们看看Qt家族的智能指针: 注: MSVC2010 和 GCC g++ 4.3 支持 C++0x MSVC2008 sp1 及 GCC g++ 4.0 ...
Qt智能指针QSharedPointer与 C++中的std::shared_ptr其作用是一样的,其应用范围比本文说到的QPointer和QScopedPointer更广。 QSharedPointer是一个共享指针,它与 QScopedPointer 一样包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针 ,也就是说,与QScopedPointer不同的是,QSharedPointer可以被自...
如果没有智能指针,程序员必须保证new对象能在正确的时机delete,四处编写异常捕获代码以释放资源,而智能指针则可以在退出作用域时(不管是正常流程离开或是因异常离开)总调用delete来析构在堆上动态分配的对象。 我们看看Qt家族的智能指针: 注: MSVC2010 和 GCC g++ 4.3 支持 C++0x ...
Qt 智能指针QScopedPoint用法,QScopedPointer类用于存储一个指向动态分配的对象的指针,并在对象销毁时自动删除它。手动管理堆分配的对象是困难
1.智能指针是使⽤RAII技术(惯⽤⼿法)对裸指针进⾏封装、隔离、管理。 2.把堆对象转移为栈对象。 为什么使⽤QT智能(smart)指针? CPP中在使⽤堆内存时我们必须使⽤指针,使⽤指针给我带来便利和强⼤的威⼒同时也给我们带来了很多隐患,所以指针也是把双刃剑。
Qt中的智能指针种类包括QPointer、QSharedPointer、QWeakPointer、QScopedPointer、QScopedArrayPointer、QSharedDataPointer、QExplicitlySharedDataPointer。这些智能指针分别用于不同类型的对象管理,提供了引用计数、生命周期控制等功能,从而实现了内存的自动释放,避免了内存泄漏和内存访问错误。其中,QShared...
如果没有智能指针,程序员必须保证new对象能在正确的时机delete,四处编写异常捕获代码以释放资源,而智能指针则可以在退出作用域时(不管是正常流程离开或是因异常离开)总调用delete来析构在堆上动态分配的对象。 我们看看Qt家族的智能指针: 注: MSVC2010 和 GCC g++ 4.3 支持 C++0x ...