假设我有两个类:
class SwordsMan{
/*...*/
virtual SwordsMan* evolve()
};
class Warrior: public SwordsMan{
/*...*/
};
我想要的目标是,一旦有足够的经验,剑士就会演变为战士。实现这个evolve()函数的最佳实践是什么,因为我想在他演化后删除“this”SwordsMan对象?
答案 0 :(得分:2)
分离对象通常是一个更好的主意。从他们一生的管理实施。
class SwordsMan {
virtual std::unique_ptr<SwordsMan> evolve();
};
class Warrior: public SwordsMan { };
在上面的第一层中,代码可能如下所示:
auto swordsMan = std::make_unique<SwordsMan>(); // Get a swordsman
if(auto evolved = swordsMan->evolve()) // Ask him to evolve
swordsMan = std::move(evolved); // Replace him
如果您只想在升级剑客时拨打evolve()
,可以放弃if
:
swordsMan = swordsMan->evolve();