Klasse in Klasse verwenden



  • [...] The template parameter T of unique_ptr may be an incomplete type.
    

    Aber mehr finde ich jetzt grad nicht zu irgendwelchen (un-)vollständigen Typen in der STL.


  • Mod

    Skym0sh0 schrieb:

    [...] The template parameter T of unique_ptr may be an incomplete type.
    

    Aber mehr finde ich jetzt grad nicht zu irgendwelchen (un-)vollständigen Typen in der STL.

    17.6.4.8/2



  • camper schrieb:

    Skym0sh0 schrieb:

    [...] The template parameter T of unique_ptr may be an incomplete type.
    

    Aber mehr finde ich jetzt grad nicht zu irgendwelchen (un-)vollständigen Typen in der STL.

    17.6.4.8/2

    Könntest Du auch den Abschnitt hier posten? Ich habe keinen Standard hier zur Hand und das geht bestimmt vielen so.

    Mich würde auch interessieren, ob das so, wie es im Beispiel ist, wirklich als "incomplete type" zu interpretieren ist.

    Im übrigen compiliert der Code aus mit IBM xlc mit eingeschalteten Warnungen (-qinfo) ohne Fehler und Warnung. Und der Compiler meckert wirklich über jede Kleinigkeit. Das verstärkt meine Annahme, dass es sich doch um korrekten Code handelt.


  • Mod

    In certain cases ([...] operations on types used to instantiate standard library template components), the C ++ standard library depends on components supplied by a C ++ program. If these components do not meet their requirements, the Standard places no requirements on the implementation.
    In particular, the effects are undefined in the following cases:
    — if an incomplete type (3.9) is used as a template argument when instantiating a template component, unless specifically allowed for that component.

    Mich würde auch interessieren, ob das so, wie es im Beispiel ist, wirklich als "incomplete type" zu interpretieren ist.

    Ja:

    A class is considered a completely-defined object type (3.9) (or complete type) at the closing } of the class-specifier. Within the class member-specification, the class is regarded as complete within function bodies, default arguments, using-declarations introducing inheriting constructors (12.9), exception-specifications, and brace-or-equal-initializers for non-static data members (including such things in nested classes). Otherwise it is regarded as incomplete within its own class member-specification.



  • tntnet schrieb:

    Ich habe keinen Standard hier zur Hand und das geht bestimmt vielen so.

    DirkB schrieb:

    Schau mal im Thras : Linkliste für Neulinge nach.
    Da gibt es Links zu den Drafts der Standards.

    Importiert und angepasst aus dem C Forum. Danke an DirkB. 😉



  • In einer Baumstruktur wären die Besitzverhältnisse mit unique_ptr einfach zu lösen; hier ist es schwieriger. shared_ptr reicht nicht, da der Graph zyklisch ist, und ich sehe keine einfache Möglichkeit, das mit weak_ptr aufzubrechen.

    Ich würde mir wahrscheinlich eine Graphenkopfklasse bauen, die die Edges, Faces und Vertices besitzt und ihre Lebensdauer festlegt, und in den Edges, Faces und Vertices selbst mit nackten Zeigern arbeiten.

    Ich verstehe nur Bahnhof 😃

    Welche Probleme gibt es denn, wenn man es mit shared_ptr versucht? Und was meinst mit Lebensdauer?



  • Wenn es in dem Graphen einen Kreis gibt, dann hält jeder Punkt einen shared_pointer auf den nächsten und der reference count wird nie 0. Das bedeutet, man hat ein Memory Leak.


Anmelden zum Antworten