首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用unique_ptr实例化类集合成员

使用unique_ptr实例化类集合成员
EN

Stack Overflow用户
提问于 2017-12-06 14:56:52
回答 1查看 149关注 0票数 1

我有一个Snake类,它由几个SnakeCell组成

代码语言:javascript
复制
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> >'

谢谢你的帮忙,

EN

回答 1

Stack Overflow用户

发布于 2017-12-06 15:12:21

以下代码

代码语言:javascript
复制
cells_({std::make_unique<SnakeCell>(x, y)})

调用此构造函数

deque( std::initializer_list init,const & alloc = Allocator() ); 从cp重税

std::initializer_list是遮风罩下的const T[]。无法移动const对象--解释您所得到的错误。

可能的解决办法:

代码语言:javascript
复制
Snake(size_t x, size_t y) 
{
    cells_.emplace_back(std::make_unique<SnakeCell>(x, y));
}

我讨厌initializer_list__..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47677253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档