我有一个Snake类,它由几个SnakeCell组成
struct SnakeCell
{
SnakeCell(size_t x, size_t y) : origin_(x, y) {}
std::pair<size_t, size_t> origin_;
};
class Snake
{
public:
Snake(size_t x, size_t y ) : cells_({std::make_unique<SnakeCell>(x, y)}) {}
private:
std::deque<std::unique_ptr<SnakeCell>> cells_;
};Snake最初是用一个SnakeCell创建的。
为什么对蛇细胞使用指针?细胞通常会被修改,例如它们的x和y组分。在发生时直接修改它们是有意义的,而不是创建一个副本并重新初始化整个cells_功能。
为什么要使用unique_ptr --我不确定它是否是正确的指针。最初的想法是确保在删除蛇本身时,从记忆的角度删除每个单元格。从设计的角度来看,Snake对象将是惟一的管理其cells的,所以使用unique_ptr而不是shared_ptr是有意义的,但是--我认为这就是我对智能指针的理解不正确的地方。
无论如何,编译器在使用unique_ptr时会发生故障。
Call to implicitly-deleted copy constructor of 'std::__1::unique_ptr<SnakeCell, std::__1::default_delete<SnakeCell> >'
谢谢你的帮忙,
发布于 2017-12-06 15:12:21
以下代码
cells_({std::make_unique<SnakeCell>(x, y)})调用此构造函数
deque( std::initializer_list init,const & alloc = Allocator() ); 从cp重税
std::initializer_list是遮风罩下的const T[]。无法移动const对象--解释您所得到的错误。
可能的解决办法:
Snake(size_t x, size_t y)
{
cells_.emplace_back(std::make_unique<SnakeCell>(x, y));
}我讨厌initializer_list__..。
https://stackoverflow.com/questions/47677253
复制相似问题