zoukankan      html  css  js  c++  java
  • QT隐含共享类 QSharedData QSharedDataPointer

    版权声明:本文为博主原创文章,未经博主同意不得转载。

    https://blog.csdn.net/davidsu33/article/details/28857391

    QT中非常多类都实现了隐含共享比如QString。QByteArray等,(这两个并没有使用QSharedData和QSharedDataPointer来实现隐含共享),可是QT的确提供了一套隐含共享机制的类QSharedData和QSharedDataPointer。

    核心原理是隐含共享数据指针(QSharedDataPointer重载->操作来控制全部对QSharedData数据对象的訪问,确保统一的訪问接口,来控制数据变化的时候,将QSharedData的原子引用计数清零。例如以下是我编写的演示样例代码。


    //将全部须要共享的数据封装在SharedData中

    class SharedData : public QSharedData

    {

    public:

    int m_bigData;

    };


    //隐含共享类

    class ImplicityClass 

    {

    void setData(int d);

    private:

    SharedData m_ptr;

    };


    void ImplicityClass::setData(int d)

    {

    //核心功能,实现->操作符的重载。来确保全部对共享数据改动的时候,从共享数据中分离。

    m_ptr->m_bigData = d;

    }


    //演示样例代码

    ImplicityClass ic1; //引用计数为1

    ImplicityClass ic2 = ic1; //引用计数为2





  • 相关阅读:
    Luogu P4053 [JSOI2007]建筑抢修
    CF894E Ralph and Mushrooms
    Boruvka
    Codeforces Beta Round #25 (Div. 2 Only) C. Roads in Berland
    HDU 3714/UVA1476 Error Curves
    HDU 5410 CRB and His Birthday
    HDU 1796 How many integers can you find
    UVA 11624 Fire!
    POJ 3279 Dungeon Master
    POJ 1321 棋盘问题
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10615738.html
Copyright © 2011-2022 走看看