移动语义
C++11的特性:move语义,一些对象构造的时候可以获取到已有的资源,而不需要通过拷贝来申请新的内存,这样移动而非拷贝将会大幅度提升性能。
首先看一个简单的例子:
string str = "fuck";
vector<string> v;
v.push_back(str);
cout << v[0] << endl;
cout << str << endl;
//这里使用move
v.push_back(move(str));
cout << v[1] << endl;
cout << str << endl;
system("pause");
return 0;
上半段比较符合我们的认知,在push_back了之后,str进入数组,但是str这个对象仍然存在。这本质上是把str复制了一份然后添加到数组里。而后面的move方式,就是真正把str拿过来,然后放进数组,str没了。
fuck
fuck
fuck
请按任意键继续. . .
深浅拷贝
下面先看一个简单的例子:
class C
{
public:
int *c;
};
int main()
{
int a = 1;
C test1;
test1.c = &a;
C test2 = test1;
cout << test1.c << endl;
cout << test2.c << endl;
system("pause")