Implizit geteilte Klasse ableiten

Alles rund um die Programmierung mit Qt
Antworten
christophr
Beiträge: 26
Registriert: 18. Dezember 2008 16:31
Wohnort: Neuhausen a.d.F.

Implizit geteilte Klasse ableiten

Beitrag von christophr »

Moin,

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.
}
Neue Situation:

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
    }
}
Wie löst ihr das Problem?
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! :wink:
Oder gibt es womöglich sogar eine "offizielle" Lösung, die ich einfach nur nicht gefunden habe?

Gruß,
Christoph
Antworten