我目前正在阅读《Head First Object Oriented Analysis and Design》一书,同时也习惯了 C++11 的一些特性(尤其是 unique_ptr 和移动语义)。在书中,他们以策略棋盘游戏的设计为例。它有一个板,瓷砖和瓷砖上的单位。代码是用 Java 编写的,我试图用 C++ 重写它。在 Java 中,tile 类如下:
public class Tile
{
private List units;
public Tile()
{
units = new LinkedList();
}
protected void addUnit(Unit unit)
{
units.add(unit);
}
protected List getUnits()
{
return units;
}
}
我首先使用 shared_ptr 在 c++ 中做了同样的事情。与我使用原始指针的第二个版本相比,它工作但非常慢。然后我尝试了 unique_ptr:
class Tile
{
public:
Tile();
virtual ~Tile();
void addUnit()
{
mUnits.push_back(std::unique_ptr<Unit>(new Unit());
}
std::vector<std::unique_ptr<Unit>> getUnits()
{
return mUnits;
}
private:
std::vector<std::unique_ptr<Unit>> mUnits;
};
编译器不喜欢 getUnits。据我了解,它来自于复制构造函数在 unique_ptr 中被禁用的事实。你将如何返回向量列表?谢谢!