QSharedData和QCborMap简介

QSharedData和QCborMap

QSharedDataQCborMap 是 Qt 框架中的两个不同的类,用于不同的用途。下面是它们的详细介绍:

QSharedData

QSharedData 是 Qt 提供的一种用于实现数据共享的机制。它主要用于实现数据的共享和引用计数,通常与 QSharedDataPointer 一起使用。它们的组合使得实现数据的共享和拷贝变得更加高效。

主要功能和用途:

  1. 引用计数QSharedData 通过引用计数来管理共享数据的生命周期。当最后一个引用被销毁时,数据才会被删除。
  2. 数据共享:多个对象可以共享同一份数据,而不需要复制。这对于需要频繁拷贝大数据的场景非常有用。
  3. 写时拷贝(Copy-on-Write, COW):当共享数据需要被修改时,才会进行实际的拷贝操作,从而减少不必要的拷贝,提高性能。

示例代码:

#include <QSharedData>
#include <QSharedDataPointer>
#include <QString>

class MySharedData : public QSharedData {
public:
    MySharedData() : value(0) {}
    MySharedData(const MySharedData &other) : QSharedData(other), value(other.value) {}
    int value;
};

class MyClass {
public:
    MyClass() : data(new MySharedData) {}
    MyClass(const MyClass &other) : data(other.data) {}
    MyClass &operator=(const MyClass &other) {
        if (this != &other) {
            data = other.data;
        }
        return *this;
    }

    int value() const { return data->value; }
    void setValue(int value) { data->value = value; }

private:
    QSharedDataPointer<MySharedData> data;
};

int main() {
    MyClass a;
    a.setValue(42);

    MyClass b = a;
    b.setValue(43);

    // a 和 b 共享同一份数据,直到 b 修改数据时才会进行拷贝
    return 0;
}

QCborMap

QCborMap 是 Qt 提供的一个类,用于处理 CBOR(Concise Binary Object Representation)格式的数据。CBOR 是一种二进制数据格式,类似于 JSON,但更紧凑和高效。

主要功能和用途:

  1. 存储键值对QCborMap 用于存储键值对,类似于 QMapQHash,但专门用于 CBOR 数据。
  2. 序列化和反序列化:它提供了将数据序列化为 CBOR 格式和从 CBOR 格式反序列化的功能。
  3. 高效传输和存储:由于 CBOR 格式的紧凑性,QCborMap 适用于需要高效传输和存储的场景。

示例代码:

#include <QCborMap>
#include <QCborValue>
#include <QByteArray>
#include <QDebug>

int main() {
    QCborMap map;
    map.insert("key1", "value1");
    map.insert("key2", 42);

    // 序列化为 CBOR 格式
    QByteArray cborData = QCborValue(map).toCbor();

    // 反序列化回 QCborMap
    QCborValue cborValue = QCborValue::fromCbor(cborData);
    QCborMap deserializedMap = cborValue.toMap();

    qDebug() << deserializedMap["key1"].toString(); // 输出 "value1"
    qDebug() << deserializedMap["key2"].toInt();    // 输出 42

    return 0;
}

总结

  • QSharedData:用于实现数据共享和引用计数,通常与 QSharedDataPointer 一起使用,适合需要高效数据共享和写时拷贝的场景。
  • QCborMap:用于处理 CBOR 格式的数据,适合需要高效二进制数据传输和存储的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Prejudices

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值