Lagerung von Monstern:Intelligente Zeiger und die Abhängigkeit von ihm in dem gesamten Programm, einmal benutzten
class MonstersStorage
{
public:
std::weak_ptr<Monster> getMonster(int ID) const;
private:
std::vector<std::shared_ptr<Monster>> monsters;
}
Es gibt nur eine Speicherung von Monstern im Spiel. Es gibt eine Menge Code, der Monster
Objekte verwendet.
Ich habe den Speicher von Monstern gemacht, der nur aus einem Grund intelligente Zeiger speichert - manchmal muss man an anderer Stelle auf Monster
verweisen und Monster können sterben (gelöscht werden und aus dem Speicher entfernt werden) - also müssen die Referenzen sicher ablaufen . Ansonsten würde ich nur normale Zeiger verwenden.
Problem ist, dass im ganzen Spiel, an jedem Ort, dass Monster
verwendet wird, muss es schwache Zeiger anstelle von einfachen Verweis oder Zeiger sein - weil alle Monster
Objekte aus einer Quelle kommt - Monster Storage.
Selbst im Fall von Funktionen, die nur Monster
benötigen, um an sie übergeben zu werden, und einige Operationen ausführen, aber keine Referenz darauf speichern. Zum Beispiel:
getDamageDealedBy(const Monster&);
Es wird sein müssen:
getDamageDealedBy(const std::weak_ptr<Monster>&);
Es wird die gesamten Code je nach Monster Lagerung Umsetzung.
Meine Frage ist, bei solchen Funktionen soll ich nur einfache Referenzen, von * .get empfangen() von Smart-Pointer, Oder sollte weak_ptr im gesamten Programm bei Monster
Klasse verwendet werden.
Editiert: Und immer diese .lock verwenden() -Funktionen über, und immer wieder, sie zu konvertieren, Shared_ptr während Monster Zugriff auf