sf::RectangleShape* operator()()
{
return &player;
} // RectangleShape Getter
Do I need to free memory after this getter?
Alles, was Sie tun, ist ein Zeiger auf player
zurückzukehren. Angenommen, dies ist eine Membervariable der Struktur/Klasse, zu der die obige Elementfunktion gehört, dann ist ihre Lebensdauer an die Lebensdauer des Objekts gebunden, mit dem Sie diese Funktion aufrufen.
Insbesondere bedeutet dies, dass dies eine schlechte Idee ist:
std::unique_ptr<sf::RectangleShape> operator()() {
return make_unique<sf::RectangleShape>(player);
}
Die Kopie:
struct Foo {
sf::RectangleShape player;
// ...
// insert your operator here
};
sf::RectangleShape * some_function(void) {
Foo f;
return f(); // UB, returning pointer to object with automatic memory whose lifetime has ended
}
[..] how would one do this with unique_ptr?
sf::RectangleShape
eine Kopie Konstruktor Unter der Annahme, dann könnte man eine Kopie player
machen Du bekommst den Weg "dein", dh du kannst dein Leben so gestalten, wie du es willst.
Ein eindeutiger Zeiger muss entweder von "make_unique" zurückgegeben werden oder anderweitig aus dem Wert eines "new" -Ausdrucks erstellt werden. –
Was ist 'Spieler'? – Galik
'player' scheint kein Zeiger zu sein, da du seine Adresse im ersten Beispiel nimmst – krzaq