创建Boid类unique_ptr存入vector触发C2280错误该如何解决?
错误原因
std::unique_ptr 是独占型智能指针,不允许拷贝,它的拷贝构造函数被标准库显式删除了。你代码里的 boids.push_back(boid); 尝试拷贝局部变量boid,因此触发了调用已删除函数的编译错误。
解决方法
有两种常用的修复方案:
方案1:转移所有权
调用std::move将局部unique_ptr的所有权转移到vector中,仅修改push_back行即可:
boids.push_back(std::move(boid));
注意:执行move后,局部变量
boid会变为空指针,不能再继续使用。
方案2:直接构造省去局部变量
直接在vector的emplace_back中构造unique_ptr,不需要额外声明局部变量,代码更简洁高效:
std::vector<std::unique_ptr<Boid>> boids; for (int i = 0; i < nInitialBoids; i++) { boids.emplace_back(std::make_unique<Boid>( olc::vf2d(rand() % 600 * 1.0f, rand() % 300 * 1.0f), rand() % 7 * 1.0f, olc::Pixel(0, 0, (rand() % 150) + 100) )); }
内容的提问来源于stack exchange,提问作者Apple_Banana
相关产品推荐
相关产品推荐

