我有一个对象,我想将它添加到矢量容器中,但我想知道我有两种方法做同样的事情吗?什么是正确的方法呢?
我之所以这样做m_boid.emplace_back(std::move(bird));是因为bird是一个基于范围的循环变量,如果我不使用bird它会提示我一个警告说Unsed变量bird但是程序仍然可以运行,因为它不是错误.
使用基于范围的for循环将对象强制返回到向量的正确方法是什么?
先感谢您.
Boid::Boid(int size)
{
m_boid.resize(size); //vector of unique pointer
for(auto &bird : m_boid)
{
//Create an object
m_obj.reset(new Boid); //unique pointer
// Add object to vector. Is this 2 below the same thing?
m_boid.emplace_back(std::move(bird)); //Should I do this?
m_boid.emplace_back(std::move(m_obj)); //Or should I do this?
}
}
Run Code Online (Sandbox Code Playgroud)
编辑.这个怎么样?这个可以吗?
void Boid::initBoid(unsigned int containSize)
{
m_boid.resize(containSize);
for(auto &bird : m_boid)
{
bird.reset(new Boid);
bird->createVAO();
}
}
Run Code Online (Sandbox Code Playgroud)
使用基于范围的for循环将对象强制返回到向量的正确方法是什么?
我不会说.emplace_back如果重新分配,可能会使迭代器无效,因此在这种情况下你会得到一个UB.