试图创建一个唯一的指针给我一个错误

Tring to create a unique pointer gives me an error

我有一个 Boid class 具有以下构造函数

Boid(olc::vf2d _position, float _angle, olc::Pixel _color) : position(_position), rotationAngle(_angle), color(_color)
    {
    };

我需要创建一个由 Boid 对象的唯一指针组成的向量。根据在线示例,我尝试执行以下操作

std::vector<std::unique_ptr<Boid>> boids;
for (int i = 0; i < nInitialBoids; i++)
{
    std::unique_ptr<Boid> boid = 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)
        );
    boids.push_back(boid);
}

它给我以下错误。

    Severity    Code    Description Project File    Line    Suppression State
    Error   C2280   'std::unique_ptr<Boid,std::default_delete<Boid>>::unique_ptr
    (const std::unique_ptr<Boid,std::default_delete<Boid>> &)': attempting to reference 
    a deleted function  boids   C:\Program Files (x86)\Microsoft Visual 
    Studio19\Community\VC\Tools\MSVC.28.29333\include\xmemory 701

我真的不知道我做错了什么,所以任何帮助将不胜感激。谢谢。如果需要更多信息,请告诉我。

std::unique_ptr不能复制,它没有复制构造函数但有移动构造函数。您可以使用 std::moveboid 转换为右值,然后可以使用移动构造函数。

std::unique_ptr<Boid> boid = 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)
    );
boids.push_back(std::move(boid));

或者直接传递临时值(也是右值)。

boids.push_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)
    ));