Posted on 2009-09-12 16:29
S.l.e!ep.¢% 閱讀(949)
評(píng)論(1) 編輯 收藏 引用 所屬分類:
C++
我列舉一個(gè)例子來(lái)說(shuō)吧:
你正在編寫C++程序中有時(shí)后用到,操作符的重載。最能體現(xiàn)深層拷貝與淺層拷貝的,就是‘=’的重載。
看下面一個(gè)簡(jiǎn)單的程序:
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;
}
上面的 =重載其是就是實(shí)現(xiàn)了淺拷貝原因。是由于對(duì)象之中含有指針數(shù)據(jù)類型.s1,s2恰好指向同一各內(nèi)存。所以是淺拷貝。而你如果修改一下原來(lái)的程序:
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;
}
這樣你就實(shí)現(xiàn)了深拷貝,原因是你為被賦值對(duì)象申請(qǐng)了一個(gè)新的內(nèi)存所以就是深拷貝。