gpt4 book ai didi

c++ - 使用 unique_ptr 实例化类集合成员

转载 作者:行者123 更新时间:2023-11-30 05:07:00 24 4
gpt4 key购买 nike

我有一个 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_;

};

A 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> >'

感谢您的帮助,

最佳答案

下面的代码

cells_({std::make_unique<SnakeCell>(x, y)})

调用这个构造函数

deque( std::initializer_list<T> init, 
const Allocator& alloc = Allocator() );

from cppreference


std::initializer_list<T> const T[]在引擎盖下。 const无法移动对象 - 解释您遇到的错误。

可能的修复:

Snake(size_t x, size_t y) 
{
cells_.emplace_back(std::make_unique<SnakeCell>(x, y));
}



我讨厌 initializer_list ...

关于c++ - 使用 unique_ptr 实例化类集合成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47677253/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com