浅拷贝与深拷贝的区别

摘自百度知道 http://zhidao.baidu.com/question/357230142.html

简单的来说就是,在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误!
我列举一个例子来说吧:
你正在编写C++程序中有时用到,操作符的重载。最能体现深层拷贝与浅层拷贝的,就是‘=’的重载。
看下面一个简单的程序:

class string
{     
	char *m_str; 
public:     
	string(char *s)
	{         
		m_str=s;    
	}     
	string()     
	{}
	String & operator=(const string s)
	{    
		m_str=s.m_str;   
		return *this
	}
};

 上面的 =重载其是就是实现了浅拷贝原因。是由于对象之中含有指针数据类型.s1,s2恰好指向同一各内存。所以是浅拷贝。而你如果修改一下原来的程序:

string&operator=(const string&s)
{     
	if(strlen(m_str)!=strlen(s.m_str))         
		m_str=new char[strlen(s.m_str)+1];     
	if(*this!=s)         
		strcopy(m_str,s.m_str);    
	return *this;
}
 

 

这样你就实现了深拷贝,原因是你为被赋值对象申请了一个新的内存所以就是深拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值