ich möchte eine bereits bestehende, implizit geteilte Klasse (implicitly shared class) ableiten. Dabei stehe ich vor dem Problem, dass der d-Zeiger in der Basisklasse als Zeiger auf das Datenobjekt der Basisklasse angelegt ist, nach dem ableiten aber eigentlich ein Zeiger auf das (erweiterte) Datenobjekt der Kindklasse sein müsste.
Kurzes Beispiel:
Ist-Situation:
Code: Alles auswählen
struct BaseData : public QSharedData
{
int a, b, c;
// Konstruktoren etc.
}
class Base
{
QSharedDataPointer<BaseData> d;
public:
void setA(int newA)
{ d->a = newA; }
// usw.
}
Code: Alles auswählen
struct DerivedData : public BaseData
{
int x, y, z;
// Und wieder Konstruktoren etc.
}
class Derived : public Base
{
public:
void doSomething()
{
d->a = 5;
// d->x = 7; funktioniert natürlich nicht
}
}
Legt ihr für jede Ableitung einen eigenen Datencontainer an, der nur von QSharedData ableitet? Dann muss man aber immer wissen, welcher Member in welcher Ebene hinzugekommen ist, da es dann die Pointer d, e, f, g, usw. gibt. Weiterhin sehe ich das Problem, dass bei dieser Lösung nicht alle Container ein detach erfahren, wenn in einem Container etwas geändert wird. Das heißt es gibt Objekte, die sich bspw. den d-Zeiger teilen, e und f sind aber in jedem Objekt getrennt. Sollte funktionieren, ist für meinen Geschmack aber alles andere als sauber.
Also, her mit den Lösungen!
Oder gibt es womöglich sogar eine "offizielle" Lösung, die ich einfach nur nicht gefunden habe?
Gruß,
Christoph