简单介绍:
QPointer是 Qt 提供的一个智能指针模板类,专门用于安全地持有 QObject 及其派生类的指针。它的核心特性是:当所指向的对象被销毁时,QPointer 会自动置为 nullptr(空指针),从而避免悬空指针问题。
常用函数:
- void clear()
- T * data() const
- bool isNull() const
简单使用:
- QPointer<QWidget> ptr = new QWidget;
- if (!ptr.isNull()) {
- QWidget* raw = ptr.data(); // 获取原始指针
- raw->show();
- }
- ptr.clear(); // 将 QPointer 置空(不 delete 对象)
-
- // 注意:这里需要手动 delete,因为 QPointer 不负责内存管理
- delete ptr.data(); // 实际上此时 data() 已是 nullptr,安全但无必要
- // 更常见的做法是:对象由 parent 管理,或在其他地方 delete
复制代码 使用范围
- 用途:安全地观察一个 QObject 是否还活着。
- 优势:避免因对象销毁导致的野指针崩溃。
- 典型场景:缓存 widget 指针、跨异步操作持有对象、防止重复 delete。
- 记住:只用于 QObject 子类,且不负责 delete 对象。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |