In meiner Methode ein Player-Objekt wird erstellt, wie:C++ erstellen Shared_ptr zu stapeln Objekt
Player player(fullName,age);
Mein Lehrer gab uns ein Stück Code mit einem Konstruktor, der einen shared_ptr zu einem Spieler Aufgabe übernimmt.
//constructor of the class
SomeClass(const std::shared_ptr<Socket> client, std::shared_ptr<Player> player)
Nehmen wir an, wir wollen den Konstruktor von SomeClass aufrufen und das Player-Objekt übergeben, das wir auf Stapel erstellt haben.
Ist es jemals sicher/möglich/gut, ein shared_ptr aus einem Stapelobjekt zu erstellen?
Um die Frage verständlicher zu machen, sagen wir, wir haben zwei große Codeprojekte und wollen sie zusammenführen, damit eine Methode aus einem Projekt von einer anderen aufgerufen wird, sollten wir alle Dateien neu schreiben, um shared_ptr oder stack objects exclusivly zu verwenden (für die Methoden, die verbunden werden müssen) oder sollten wir nur ein shared_ptr für das Stack-Objekt erstellen.
Warum im nicht sicher über das Ergebnis:
Was passiert, wenn der Umfang, wo die stackobject Ende geschaffen wird, aber die Shared_ptr noch verwendet wird und umgekehrt.
Das Stackobject wird gelöscht, wenn es außerhalb des Gültigkeitsbereichs liegt oder bleibt es am Leben, weil es immer noch einen Verweis auf das Objekt (in einer anderen Klasse) gibt?
Die shared_ptr verlässt den Gültigkeitsbereich und versucht, das Objekt zu löschen, kann es, obwohl das Stackobject darauf Bezug nimmt?
Anmerkung: Ich weiß, dass ich nur die folgenden und passieren nutzen könnte Spieler
shared_ptr<Player> player{ new Player {fullName,age} };
Mögliches Duplikat von [Set shared \ _ptr, um auf vorhandenes Objekt zu verweisen] (http://stackoverflow.com/questions/24049155/set-shared-ptr-to-point-existing-object) – Zereges
Seitliche Notiz, wenn Sie in sind C++ 11 oder neuer, es ist eine gute Angewohnheit, 'make_shared' zu verwenden, wenn du kannst. in diesem Fall: 'auto player = std :: make_shared (fullName, Alter);' Es ist in den meisten Fällen effizienter und sicherer. –