试图创建一个唯一的指针给我一个错误
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::move
将 boid
转换为右值,然后可以使用移动构造函数。
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)
));
我有一个 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::move
将 boid
转换为右值,然后可以使用移动构造函数。
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)
));