new typeof(抽象类)

时间:2018-01-27 20:49:07

标签: c++ inheritance polymorphism

我有抽象类 Item 和一些子多态类的Item,如: Sword Ax 等。

在c ++中是否可以执行以下操作:

Item* firstVariable = new Sword();
Item* secondVariable = new typeof(firstVariable);

当我这样做时,我得到一个错误,即Item是一个抽象类。 你知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

要解释Neil的评论,这里有基本的克隆习语或虚拟副本成语:

.map()

但是,我建议几乎不要使用class Item { public: virtual ~Item() = 0; virtual Item* clone() const = 0; protected: Item(const Item&) = default; Item(Item&&) = default; Item& operator=(const Item&) = default; Item& operator=(Item&&) = default; }; Item::~Item() = default; class Sword : public Item { public: virtual Item* clone() const override { return new Sword(*this); } }; class Axe : public Item { public: virtual Item* clone() const override { return new Axe(*this); } }; int main() { Item* firstVariable = new Sword(); Item* secondVariable = firstVariable->clone(); delete firstVariable; delete secondVariable; } new,因为它们太容易犯错误,让你失去指针,加倍删除,内存泄漏,异常不友好的代码,以及等等。这是一个更安全的解决方案:

delete