【QT中的一些高级数据结构,持续更新中...】

QT中有一些很精妙、便捷的设计,在了解这些数据的同时,我们可以学到如何更好的设计代码。本贴持续更新中,欢迎关注和收藏

一 QScopedPointer

QScopedPointer 是 Qt 中的一种智能指针,它的主要作用是管理动态分配的内存,确保在指针离开作用域时自动释放内存,从而避免内存泄漏。

主要特点:

  • 自动内存管理:

    QScopedPointer 在作用域结束时自动销毁所指向的对象,调用其析构函数并释放内存。这样可以确保无论正常退出作用域,还是通过异常退出作用域,都会自动释放资源,减少内存泄漏的风险。

  • 无拷贝构造函数:

    QScopedPointer 不允许拷贝构造和拷贝赋值操作,因此它的所有权是独占的。这个特性确保了不会意外地复制指针,避免了重复删除相同内存的风险。

  • 使用场景:

    适用于需要自动管理堆上对象生命周期的情况,特别是在不需要共享所有权的场景中。

示例代码

cpp 复制代码
#include <QScopedPointer>
#include <QDebug>

class MyClass {
public:
    MyClass() {
        qDebug() << "MyClass created";
    }
    ~MyClass() {
        qDebug() << "MyClass destroyed";
    }
};

int main() {
    {
        QScopedPointer<MyClass> ptr(new MyClass);
        // ptr 的作用域结束后会自动调用析构函数
    } // 离开作用域,MyClass 对象会被销毁

    return 0;
}

二 Q_DISABLE_COPY

cpp 复制代码
Q_DISABLE_COPY(MarkerPointRecognitionPage);

显式禁用拷贝构造函数和赋值运算符。

这意味着 MarkerPointRecognitionPage 类不能被拷贝或赋值,这是一个非常好的做法,尤其是当类内部有指针成员(如 QScopedPointer)时,拷贝操作通常会导致浅拷贝或资源管理上的问题。

相关推荐
打码农的篮球31 分钟前
STL——list
开发语言·c++·list
C++ 老炮儿的技术栈1 小时前
在 Scintilla 中为 Squirrel 语言设置语法解析器的方法
linux·运维·c++·git·ubuntu·github·visual studio
@蓝莓果粒茶2 小时前
LeetCode第350题_两个数组的交集II
c++·python·学习·算法·leetcode·职场和发展·c#
设计师小聂!2 小时前
力扣热题100----------53最大子数组和
java·数据结构·算法·leetcode
YouQian7723 小时前
问题 C: 字符串匹配
c语言·数据结构·算法
yanxing.D3 小时前
408——数据结构(第二章 线性表)
数据结构·算法
艾莉丝努力练剑3 小时前
【LeetCode&数据结构】二叉树的应用(二)——二叉树的前序遍历问题、二叉树的中序遍历问题、二叉树的后序遍历问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
Jackilina_Stone4 小时前
【faiss】用于高效相似性搜索和聚类的C++库 | 源码详解与编译安装
android·linux·c++·编译·faiss
喜欢吃燃面4 小时前
C++:list(1)list的使用
开发语言·c++·学习
waveee1234 小时前
学习嵌入式的第三十三天-数据结构-(2025.7.25)服务器/多客户端模型
服务器·数据结构·学习