Краткий ответ: Нет.
Более длинный ответ таков: если я правильно понимаю, что вы хотите сделать sh, проблема в том, что объект g
типа Game
удерживается локальной переменной внутри области вашей функции-члена Instructor::createGame
. Как только эта функция «выполнена», то есть локальная область действия заканчивается, объект, имеющий automati c хранилище , будет уничтожен. Это прошло. Я не знаю, что означает int
, что вы возвращаете, но независимо от того, что он делает, он не содержит объект типа Game
.
Теперь вы , вероятно, хотите, чтобы ваш createGame
возвращал некоторый тип дескриптора фактическому Game
объекту. В зависимости от ваших настроек c, ваша задача - выбрать способ передачи такого объекта вокруг . Например, один из способов может быть таким:
Game Instructor::createGame() const { // 1
Game g;
// do stuff with g, perhaps?
return g;
}
Другой может быть:
std::unique_ptr<Game> Instructor::createGame() const { // 2
auto gptr = std::make_unique<Game>();
// do stuff with gptr, perhaps?
return gptr;
}
Или еще один:
std::size_t Instructor::createGame() { // 3
// Instructor has a member std::vector<Game> games
games.emplace_back();
// do stuff with games.back()
return games.size()-1;
}
Существует множество других способов передать объект.
Неважно, что вы выберете, у вас есть , чтобы передать что-то , чтобы определить , какой Game
объект, о котором вы говорите вернуться к вашей функции showGameStatus
, если вы планируете, чтобы вокруг нее летало более одного Game
объекта (я полагаю, вы это делаете).
auto some_handle = instructor.createGame();
// ... later ...
instructor.showGameStatus(some_handle);
Все это верно, если Вы хотите более одного объекта . В противном случае вы можете просто добавить объект в качестве члена вашего Instructor
типа:
class Instructor {
private:
Game game;
public:
Instructor() : game() {}
// no createGame function, it is superfluous
void showGameStatus() const {
game.some_output_function();
}
};