C::在拷贝里memcpy和for的区别~~

我们开门见山,直接说明问题:

先看代码:(这里我用用模板实现容器类的一段代码来说明问题)

//赋值运算符重载函数
template<typename T>
Vector<T>& Vector<T>::operator=(const Vector& v)
{
	if(this != &v)
	{
		T* temp = new T[v._capacity];
		for(size_t i= 0; i<_size; i++)
		{
			temp[i]= v._data[i];  //注意
		}
		delete _data;
		_data = temp;
		_capacity = v._capacity;
		_size = v._size;
		
	}
	return *this;
}
在这段代码里我们使用了for循环,如果我们使用memcpy也是可以的,只是对于内置类型,当我们用比如string的对象时,程序就会崩溃,这是为什么呢?往下看:


这张图清晰的说明了memcpy在做非内置类型的拷贝时是不可以的。

【再次总结】:

1)在对于内置类型的拷贝时,用for循环和memcpy都可以,使用memcpy效率会更快

2)但是在非内置类型中,使用memcpy会出现内存泄露,只是值的拷贝,所以要使用for 循环来进行拷贝。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值