版权声明:本文为博主原创文章,未经博主同意不得转载。
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