Ich implementiere große Strukturen (etwas wie Struktur A hat Struktur B und Struktur B hat Struktur C und so weiter ...). In einer der verschachtelten Ebenen hat eine Struktur einen Zeiger auf sich selbst. Welche Lösung wird damit besser umgehen?Gemeinsamer Zeiger der Liste mit geteilten Zeigern
Ich weiß, dass die Verwaltung von rohen Zeigern kümmern müssen Erstellen und Löschen von Objekten. Was ist mit intelligenten Zeigern? Gibt es etwas Gefährliches, indem man so etwas erstellt?
EDIT
Dies ist, wie diese Struktur verwendet wird:
void createStruct()
{
//Here will be created pointer to main struct
std::shared_ptr<StructA> structA = fillStruct();
//Here get everything what is needed from this struct and this struct wont be used nymore
}
fillStruct Funktion:
std::shared_ptr<StructA> fillStruct()
{
std::shared_ptr<StructA> structA = std::make_shared<StructA>();
//Here fill whole structA
//Somewhere create struct B included in struct A
structA->structB = std::make_shared<StructB>();
//Now fill struct B
//and so on...
//Now somewhere in nested struct create MyStruct
//return this whole created struct
return structA;
}
Vielen Dank für Ihre Antworten.
Ich denke nicht, dass dies beantwortet werden kann, ohne dass Sie erklären, welche Lebensdauer Management/Anforderungen Sie verwenden möchten, und indem Sie darüber nachdenken, werden Sie wahrscheinlich Ihre eigene Frage beantworten. –
Wenn es nicht sehr leistungskritisch ist, würde ich immer die 1. Version über die 2. bevorzugen. Warum sollten Sie sich selbst verwalten, wenn dies automatisch für Sie erledigt werden kann? Auch Sie sind sicher, dass Sie 'std :: list' über' std :: VECTOR' verwenden? – Timo
@Timo: 'shared_ptr' ist keine vollständige Garbage Collection. Es kann keine Introspektion durchführen, kann keine Zyklen erkennen und daher keine Zyklen unterbrechen. – MSalters