C++11 向量移动语义c++;11
我已经寻找了一段时间,但我找不到对我的怀疑的明确解释。 主要是:C++11 向量移动语义c++;11,c++11,vector,move,C++11,Vector,Move,我已经寻找了一段时间,但我找不到对我的怀疑的明确解释。 主要是: structfoo { foo(int n=0):m_n(n){} 国际货币基金组织; }; std::vec; 向量推回(100); 向量推回(55); 向量推回(6); 为什么你认为指针不能被“交换”?让我给你展示一个可能的实现>这里没有移动操作,在C++ 11中,它应该以同样的方式工作。我确实知道,在某些情况下指针可以是“SWAP”,这是移动的点,但是它在这种情况下工作吗?@ AdAMADAMOWICZ什么是代码>这个案例<
structfoo
{
foo(int n=0):m_n(n){}
国际货币基金组织;
};
std::vec;
向量推回(100);
向量推回(55);
向量推回(6);
为什么你认为指针不能被“交换”?让我给你展示一个可能的实现>这里没有移动操作,在C++ 11中,它应该以同样的方式工作。我确实知道,在某些情况下指针可以是“SWAP”,这是移动的点,但是它在这种情况下工作吗?@ AdAMADAMOWICZ什么是代码>这个案例< /代码>?你不是在说移动语义吗?“在这种情况下”我指的是调整向量的大小。我只想知道向量的实现是否会将前一个块中的所有元素复制到新分配的块中。@AdamAdamowicz在调整大小时,当然向量会分配新内存并复制数据。
struct foo
{
foo(int n=0) : m_n(n) {}
int m_n;
};
std::vector<foo> vec;
vec.push_back(100);
vec.push_back(55);
vec.push_back(6);
std::cout << vec.data() << std::endl; //0x1aca010
std::cout << vec.capacity() << std::endl; //4
vec.push_back(6);
vec.push_back(6);
std::cout << vec.data() << std::endl; //0x1aca050 *
std::cout << vec.capacity(); //8
template <typename T>
class vector
{
private:
T *mem;
// ...
public:
// ...
vector(vector &&rhs)
: vector() // delegate constructor
{
rhs.swap(*this);
}
vector &operator =(vector &&rhs)
{
rhs.swap(*this);
rhs.clear();
rhs.shrink_to_fit();
return *this;
}
void swap(vector &obj)
{
using std::swap;
swap(mem, obj.mem);
// ...
}
// ...
};