sf::RectangleShape* operator()()
{
return &player;
} // RectangleShape Getter
Do I need to free memory after this getter?
Все, что вам сделать, это вернуть указатель на player
. Предполагая, что это переменная-член структуры/класса, указанная выше функция-член является частью, то ее время жизни привязано к времени жизни объекта, с которым вы вызываете эту функцию.
В частности, это означает, что это плохая идея:
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
имеет конструктор копирования, то вы можете сделать копию player
:
std::unique_ptr<sf::RectangleShape> operator()() {
return make_unique<sf::RectangleShape>(player);
}
Копия вы получаете этот путь «ваш», то есть вы можете управлять жизнью, как хотите.
Уникальный указатель должен быть либо возвращен из 'make_unique', либо иначе построен из значения выражения' new'. –
Что такое 'игрок'? – Galik
'player', похоже, не является указателем, так как вы берете его адрес в первом примере – krzaq