我设计了一个写时复制基类。该类保存共享数据模型/ CoW模型中所有子项所需的默认数据集。
派生类还包含仅与它们相关的数据,但应该是该派生类的其他实例之间的CoW。
我正在寻找一种干净的方式来实现这一点。如果我有一个基类FooInterface与共享数据FooDataPrivate和派生对象FooDerived。我可以创建一个FooDerivedDataPrivate。
底层数据结构不会影响公开的getter / setters API,因此它与用户如何与对象进行交互无关。我只是想知道这是否是这种情况的典型MO或者是否有更好/更清洁的方式?
让我感兴趣的是,我看到私有数据类之间的继承潜力。例如。 FooDerivedDataPrivate:public FooDataPrivate,但我没有看到在派生类中利用该多态的方法。
class FooDataPrivate
{
public:
Ref ref; // atomic reference counting object
int a;
int b;
int c;
};
class FooInterface
{
public:
// constructors and such
// ....
// methods are implemented to be copy on write.
void setA(int val);
void setB(int val);
void setC(int val);
// copy constructors, destructors, etc. all CoW friendly
private:
FooDataPrivate *data;
};
class FooDerived : public FooInterface
{
public:
FooDerived() : FooInterface() {}
private:
// need more shared data for FooDerived
// this is the ???, how is this best done cleanly?
};