歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 深拷貝的現代寫法

深拷貝的現代寫法

日期:2017/3/1 9:16:51   编辑:Linux編程

深拷貝的現代寫法相比傳統寫法更加簡單。也就是建立一個中間對象tmp,它的_str指針指向的內容是s._str的一份拷貝,交換tmp._str和_str後,_str就指向了s._str那份拷貝,出了作用域tmp會自動調用它的析構函數,也就把原先_str指向的內存釋放了,同樣達到了我們要的效果。

淺析:淺拷貝 及 深拷貝的傳統寫法 http://www.linuxidc.com/Linux/2016-04/130277.htm

如下圖:

#include<iostream>

using namespace std;

class String

{

public:

String(char * str="") //不能strlen(NULL)

:_str(new char [strlen(str ) + 1])

{

strcpy(_str, str);

}

String(const String &s)

:_str(NULL )

{

String tmp(s ._str);

swap(_str,tmp._str);

}

String& operator=(const String& s)

{

if (this != &s)

{

String tmp(s._str);

swap(_str, tmp._str);

}

return *this;

}

~String()

{

delete[] _str;

}

private:

char* _str;

};

當然,這裡的賦值運算符重載還可以進行再優化:

String& operator=(String s) //優化 (s不能加引用,否則會改變實參的值)(這裡的s是實參的一份拷貝)

{

swap(_str, s._str);

return *this ;

}

Copyright © Linux教程網 All Rights Reserved