Wieso darf man nur 1x `make_shared()` aufrufen, wenn man `shared_ptr` in 3 `vector`s verwenden möchte?
- 
					
					
					
					
 @Swordfish Genau, und jetzt ändere mal x1 indem es vorher aus v1 oder v2 geholt und dereferenziert wird, Quatschkopf. 
 
- 
					
					
					
					
 @SeppJ sagte in Wieso darf man nur 1x make_shared()aufrufen, wenn manshared_ptrin 3vectors verwenden möchte?:Die beiden Codes machen sehr verschiedene Dinge (im ersten gibt es zwei Instanzen von X und die beiden Vektoren teilen sich eine davon; im zweiten gibt es drei Instanzen von X und die Vektoren haben zwei vollkommen unabhängige). 
 
- 
					
					
					
					
 @SeppJ sagte in Wieso darf man nur 1x `make_shared()` aufrufen, wenn man `shared_ptr` in 3 `vector`s verwenden möchte?: im ersten gibt es zwei Instanzen von X und die beiden Vektoren teilen sich eine davon; im zweiten gibt es drei Instanzen von X und die Vektoren haben zwei vollkommen unabhängige Genau, wie der Name es schon vermuten lässt, sollen sich die Vektoren dieselbe Instanz von X teilen... das war meine Intention. 
 
- 
					
					
					
					
 @EinNutzer0 sagte in Wieso darf man nur 1x `make_shared()` aufrufen, wenn man `shared_ptr` in 3 `vector`s verwenden möchte?: @SeppJ sagte in Wieso darf man nur 1x `make_shared()` aufrufen, wenn man `shared_ptr` in 3 `vector`s verwenden möchte?: im ersten gibt es zwei Instanzen von X und die beiden Vektoren teilen sich eine davon; im zweiten gibt es drei Instanzen von X und die Vektoren haben zwei vollkommen unabhängige Genau, wie der Name es schon vermuten lässt, sollen sich die Vektoren dieselbe Instanz von X teilen... das war meine Intention. Na, dann ist Code 1 richtig und Code 2 nicht. Was ist jetzt deine Frage? 
 
- 
					
					
					
					
 @SeppJ sagte in Wieso darf man nur 1x `make_shared()` aufrufen, wenn man `shared_ptr` in 3 `vector`s verwenden möchte?: Na, dann ist Code 1 richtig und Code 2 nicht. Was ist jetzt deine Frage Wieso ist (1) richtig? ... 
 
- 
					
					
					
					
 Weil x2aufx1zeigt und dux2in beide vektoren stopfst?Im zweiten Code bastelst du ZWEI shared_ptr<>auf zwei verschiedene Objekte die beide mitx1nichts zu tun haben außer daß sie Kopien vonx1sind.
 
- 
					
					
					
					
 @EinNutzer0 sagte in Wieso darf man nur 1x `make_shared()` aufrufen, wenn man `shared_ptr` in 3 `vector`s verwenden möchte?: @SeppJ sagte in Wieso darf man nur 1x `make_shared()` aufrufen, wenn man `shared_ptr` in 3 `vector`s verwenden möchte?: Na, dann ist Code 1 richtig und Code 2 nicht. Was ist jetzt deine Frage Wieso ist (1) richtig? ... Weil make_shared ein neues geteiltes Objekt mit den gegebenen Argumenten erstellt, es macht (anders als der Name vielleicht vermuten lässt) nicht aus einem bestehenden Objekt irgendwie magisch ein geteiltes Objekt. 
 
- 
					
					
					
					
 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_ptreine 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_ptrin 3vectors verwenden möchte?:wozu shared_ptrund 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_ptrin 3vectors verwenden möchte?:wieso kann man unordered_mapnur 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_pointerkeine 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_pointereine gute Lösung dafür wäre.shared_pointerlö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? 
 
 
			
			
		
