歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> 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