S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

C++ 浅拷贝 & 深拷贝

Posted on 2009-09-12 16:29 S.l.e!ep.¢% 阅读(921) 评论(1)  编辑 收藏 引用 所属分类: C++
我列举一个例子来说吧:
你正在编写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}
};
int main()
{
string s1("abc"),s2;
s2=s1;
cout<<s2.m_str;

}

上面的 =重载其是就是实现了浅拷贝原因。是由于对象之中含有指针数据类型.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)
strcmp(m_str,s.m_str);
return *this;
}
这样你就实现了深拷贝,原因是你为被赋值对象申请了一个新的内存所以就是深拷贝。

Feedback

# re: C++ 浅拷贝 & 深拷贝  回复  更多评论   

2009-09-19 21:28 by 天堂露珠
strcmp(m_str,s.m_str);=>strcpy(m_str,s.m_str);

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理