隐式共享的目的:最大化资源利用最小化拷贝
SharedData.h
#include <QSharedData>
// 首先创建一个数据对象,需要继承自QShareData,因为其提供了引用计数器的功能
class SharedData: public QSharedData
{
public:
SharedData()
: QSharedData()
, var(0)
{}
SharedData(const SharedData &other)
: QSharedData(other)
, var(other.var)
{}
int var;
};
// 然后创建数据操作者
class DataOwner
{
public:
DataOwner()
: d(new SharedData)
{}
DataOwner(int var)
: d(new SharedData)
{
// 对于写操作,运算符->会在需要时自动拷贝共享数据
d->var = var;
}
private:
// 模板类QSharedDataPointer隐藏了隐式共享的实现细节,因此没必要创建拷贝构造函数和赋值运算符
QSharedDataPointer<SharedData> d;
};