C++面试用题(三)move语义、构造函数、深浅拷贝、右值引用

本文详细介绍了C++11的移动语义,通过实例展示了深拷贝和浅拷贝的区别,解释了移动构造函数的作用,并详细阐述了右值引用的概念及其在资源转移中的应用。通过理解这些概念,可以提高C++程序的性能和内存管理效率。
摘要由CSDN通过智能技术生成

移动语义

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")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值