Problem mit Forward Declaration bei selbstgeschriebenem shared_ptr



  • wxSkip schrieb:

    EDIT: Beispiel:

    shared_ptr<MyWidget> widget(new MyWidget);
    
    widget.DisableManaging();
    widget->SetParent(window);  //widget wird von window gemanaged
    
    //...
    
    widget->SetParent(NULL);
    widget.EnableManaging();
    

    Du könnest weiterhin shared_ptr/weak_ptr verwenden, indem Du
    im Child ein weak_ptr zum Parent speicherst und
    im Parent ein shared_ptr zum Child speicherst

    Oder Du erfindest diese ganzen Räder nicht alle nochmal neu und nimmst einfach Qt oder gtkmm.



  • wxSkip schrieb:

    HighLigerBiMBam schrieb:

    wxSkip schrieb:

    Dann mach mir einen besseren Vorschlag

    divided_ptr 🙄

    😃
    ...

    Ich meinte divided im Sinne von "geteilte Nutzung" nicht wie shared "gemeinsame Nutzung". Ich finde es passend, und außerdem klingt es cool 🕶



  • shared heißt doch auch geteilt im Sinne von "geteilte Nutzung". divided heißt für mich klar "getrennt". Selbst falls das Wörterbuch eine andere Bedeutung noch vorschlägt, bin ich dennoch ziemlich sicher, dass das die erste Denotation ist, die man im Kopf hat.

    Vll. distributed_ptr?

    Ansonsten mostly_shared_ptr oder most_of_the_time_shared_ptr oder sometimes_shared_ptr oder maybe_shared_ptr oder under_certain_circumstances_shared_ptr 🙂



  • shared ownership = geteilter Besitz



  • krümelkacker schrieb:

    Oder Du erfindest diese ganzen Räder nicht alle nochmal neu und nimmst einfach Qt oder gtkmm.

    Ich muss dazu sagen, dass ich shared_ptrs momentan an 2 Stellen verwenden will:
    1. Ein Projekt ganz ohne externe Libraries. Bisher verwende ich std::shared_ptr, da ich mit TDM-GCC 4.5.1 arbeite. Ich fände es aber geschickt, wenn das Projekt auch mit Compilern ohne TR1 kompilierbar ist (auch ohne boost). Hier benutze ich manchmal auch rohe Pointer wegen der zyklischen Abhängigkeiten, ich könnte mir aber auch vorstellen, auf weak_ptr umzusteigen.
    2. Ein Projekt mit Qt. Dieses Projekt erfordert sowieso C++0x-Support, daher steht std::shared_ptr zur Verfügung. Dort bräuchte ich aber auch diese Managed-Unmanaged-Wechsel. QPointer stellt also 1. keine Bereicherung im Vergleich zu std::shared_ptr dar und 2. erfordert dieser ja, dass nur QObjects als Typ verwendet werden. (was bei mir wahrscheinlich nicht der Fall sein wird)



  • Dann halt andere Vorschläge:

    split_ptr
    forked_ptr
    separated_ptr
    cleft_ptr
    appointed_ptr
    

    Und shared-ownership (mit Bindestrich) ist das Beteiligungsverhältnis. Ich finde nur ein anderes Wort sollte her.



  • Ich plädiere für managed_ptr. (Dass der Pointer sich manchmal nicht managed ist IMHO auch eine Form von Management)



  • Pass bloss auf dass du dir damit nicht selbst in den Fuss schiesst.

    Die übliche Vorgehensweise wäre AFAIK den Parent als Raw-Pointer abzuspeichern, und die Klasse von enable_shared_from_this abzuleiten.
    Dadurch kann GetParent einen shared_ptr zurückgeben, und man hat trotzdem keinen Cycle.



  • hustbaer schrieb:

    Pass bloss auf dass du dir damit nicht selbst in den Fuss schiesst.

    Die übliche Vorgehensweise wäre AFAIK den Parent als Raw-Pointer abzuspeichern, und die Klasse von enable_shared_from_this abzuleiten.
    Dadurch kann GetParent einen shared_ptr zurückgeben, und man hat trotzdem keinen Cycle.

    Wie meinst du das? Ich kann ja nicht einfach die ganzen Qt-Klassen ableiten. Geht es dir um die zyklischen Abhängigkeiten (welche ja nicht das Problem waren)?



  • Mir geht es darum:

    wxSkip schrieb:

    shared_ptr<MyWidget> widget(new MyWidget); 
    
    widget.DisableManaging(); 
    widget->SetParent(window);  //widget wird von window gemanaged 
    
    //... 
    
    widget->SetParent(NULL); 
    widget.EnableManaging();
    


  • Dann verstehe ich nicht, was du gemeint hast.


Anmelden zum Antworten