这是一个与我已经看过的问题非常类似的问题,在这里回答 - Restarting a game and reinstantiate objects。
我想要完全相同的东西,除了我的问题略有不同,我希望重新实现的对象是'全局',并且只在程序第一次运行时才创建。
目前我在#includes之后和我的函数原型之前创建了新的'Player'......
#include "Player.h"
#include "Monster.h"
using namespace std;
string MonsterTypes[3] = {"Orc","Goblin","Dark Rider"};
//create a stack of 'monsters'
stack<Monster>MonsterList;
Player* NewPlayer = new Player();
int NewGame();
void SetupPlayer();
void SetupMonsters();
void MainGame();
void Combat();
int GetMonstersLeft();
我是否需要创建一个完整的工厂类才能创建一个单独的玩家?显然,当我调用函数'setupPlayer'时,我可以在那里创建播放器对象,但是我不必将'NewPlayer'传递给其他所有函数,如果有办法避免这样做,我只是在徘徊?
答案 0 :(得分:1)
您可以在SetupPlayer
中创建新播放器,并将其指定给NewPlayer
。
由于您的全局NewPlayer
是指向Player
对象的指针,因此您每次拨打Player
时都可以在其位置创建新的SetupPlayer()
,如下所示:
Player* NewPlayer = NULL; // Initialized when calling SetupPlayer()
void SetupPlayer() {
delete NewPlayer; // Delete the previous player (if any)
NewPlayer = new Player();
}
答案 1 :(得分:1)
您真的不需要动态分配。您可以像这样声明一个自动变量:
Player player;
然后当你想重置它时,你可以使用:
player = Player();
永远记住,动态分配很昂贵。
我可能会做的是创建一个“工厂”功能:
Player make_player() {
Player ret;
// setup ret
return ret;
}
这样你就可以摆脱那个全局对象。不要担心返回时复制对象的性能:通过众所周知的优化(返回值优化 - RVO)来删除副本。