Wieso darf man nur 1x `make_shared()` aufrufen, wenn man `shared_ptr` in 3 `vector`s verwenden möchte?
-
Dieser Beitrag wurde gelöscht!
-
Was an dieser Frage wurde noch nicht 3x in diesem Thread beantwortet?
-
@EinNutzer0 sagte in Wieso darf man nur 1x `make_shared()` aufrufen, wenn man `shared_ptr` in 3 `vector`s verwenden möchte?:
Und da frage ich mich eben, wieso nicht, wenn ein
shared_ptr
eine Instanz kapselt.Nochmal, vielleicht fällt dann der Groschen:
make_shared<>()
bastelt ein NEUES Objekt als Kopie seines Arguments.
Willst Du einenshared_ptr<>
auf ein bereits existierendes Objekt dann kopiere einfach denshared_ptr<>
.
-
Ja, Frage beantwortet.
-
Doch noch eine Frage,
- wozu shared_ptr und keine stinknormalen Pointer?,
- wieso kann man unordered_map nur mit solchen benutzen?
-
@EinNutzer0 sagte in Wieso darf man nur 1x
make_shared()
aufrufen, wenn manshared_ptr
in 3vector
s verwenden möchte?:wozu
shared_ptr
und keine stinknormalen Pointer?,Weil
shared_ptr<>
dafür sorgt daß das Objekt auf das er zeigt am leben bleibt solange noch irgendeinshared_ptr<>
darauf zeigt.@EinNutzer0 sagte in Wieso darf man nur 1x
make_shared()
aufrufen, wenn manshared_ptr
in 3vector
s verwenden möchte?:wieso kann man
unordered_map
nur mit solchen benutzen?Mit was?
-
Die Frage "Warum
shared_pointer
?" am mir auch, als ich gestern deinen - inzwischen von dir gelöschten - Code durch gelesen habe. Nicht, weilshared_pointer
keine Einsatzgebiete hätte, sondern weil du es doch sehr exzessiv benutzt hast, ohne das klar zu sein schien, wieso du die Datenstrukturen so gewählt hast, wie du es hast. Das gesamte Datenstrukturdesign kam mir sehr verdächtig vor, da dort anscheinend eine Art Koordination zwischen einer Map und einem Vektor stattfinden soll (noch dazu eine Map mit einem integer als Key, das ist ja praktisch schon fast wieder ein Vector), und du anscheinend denkst, dassshared_pointer
eine gute Lösung dafür wäre.shared_pointer
löst aber überhaupt nicht das Problem inkonsistenter Datenhaltung, es verhindert bloß, dass dein Programm abstürzt, selbst wenn es logisch falsch ist. Was es höchstwahrscheinlich ist, denn es war nicht erkennbar, dass du die eigentliche Problematik gelöst hast.Der gesamte Ansatz mit mehreren Containern mit geteiltem Inhalt ist jedenfalls verdächtig, und muss mindestens sauber abgekapselt werden, oder sogar ganz anders angegangen werde.
-
@SeppJ Wiederhergestellt. Dann schlage bitte etwas besseres vor.
-
@EinNutzer0 sagte in Wieso darf man nur 1x `make_shared()` aufrufen, wenn man `shared_ptr` in 3 `vector`s verwenden möchte?:
@SeppJ Wiederhergestellt. Dann schlage bitte etwas besseres vor.
Ich kann nicht anhand von ein paar Problemzeilen das fundamentale Datenmodell deines Programms ableiten.
-
@EinNutzer0 sagte in Wieso darf man nur 1x `make_shared()` aufrufen, wenn man `shared_ptr` in 3 `vector`s verwenden möchte?:
Doch noch eine Frage,
- wozu shared_ptr und keine stinknormalen Pointer?,
- wieso kann man unordered_map nur mit solchen benutzen?
std::unordered_map kann man mit allem verwenden. Wie kommst du darauf, dass die Verwendungsmöglichkeit eingeschränkt ist?