You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 06:36:05