В настоящее время я просматриваю книгу Head First Object Oriented Analysis and Design и одновременно привык к некоторым функциям С++ 11 (особенно unique_ptr и move semantics). В книге они приводят в качестве примера стратегическую настольную игру. Он имеет доску, плитки и плитки. Код находится в Java, и я пытался переписать его на С++. В Java класс плитки выглядит следующим образом:
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. Он работал, но очень медленно, по сравнению с моей второй версией, в которой использовались исходные указатели. Затем я попробовал 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. Как бы вы вернули список векторов? Спасибо!