国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

深拷貝

2019-11-08 01:47:59
字體:
來源:轉載
供稿:網友
深拷貝

當用一個已初始化過了的自定義類類型對象去初始化另一個新構造的對象的時候,拷貝構造函數就會被自動調用。也就是說,當類的對象需要拷貝時,拷貝構造函數將會被調用。以下情況都會調用拷貝構造函數:(1)一個對象以值傳遞的方式傳入函數體 (2)一個對象以值傳遞的方式從函數返回 (3)一個對象需要通過另外一個對象進行初始化。

如果在類中沒有顯式地聲明一個拷貝構造函數,那么,編譯器將會自動生成一個默認的拷貝構造函數,該構造函數完成對象之間的位拷貝。

淺拷貝(影子克隆):只復制對象的基本類型,對象類型,仍屬于原來的引用.深拷貝(深度克隆):不緊復制對象的基本類,同時也復制原對象中的對象.就是說完全是新對象產生的.淺 拷貝和深拷貝之間的區別:淺拷貝是指將對象中的數值類型的字段拷貝到新的對象中,而對象中的引用型字段則指復制它的一個引用到目標對象。如果改變目標對象 中引用型字段的值他將反映在原是對象中,也就是說原始對象中對應的字段也會發生變化。深拷貝與淺拷貝不同的是對于引用的處理,深拷貝將會在新對象中創建一 個新的和原是對象中對應字段相同(內容相同)的字段,也就是說這個引用和原是對象的引用是不同的,我們在改變新對象中的這個字段的時候是不會影響到原始對 象中對應字段的內容。所以對于原型模式也有不同的兩種處理方法:對象的淺拷貝和深拷貝。
#include<iostream>using namespace std;class String{public: String(const char *pStr = "") {  if(NULL == pStr)  {   _pStr = new char[1];   *_pStr ='/0';  }  else  {   _pStr = new char[strlen(pStr)+1];   strcpy(_pStr,pStr);  } } String(const String &s)  :_pStr(new char[strlen(s._pStr)+1]) {  strcpy(_pStr,s._pStr); } String& Operator=(const String &s) {  if(this != &s)  {   char *pTemp = new char[strlen(s._pStr)+1];   strcpy(pTemp,s._pStr);   delete[] _pStr;   _pStr = pTemp;  }  return *this; } ~String() {  if(_pStr)  {   delete[] _pStr;   _pStr = NULL;  } }PRivate: char *_pStr;};void Funtest(){ String s1 =  "111111"; String s2(s1);// cout<<s2._pStr<<endl;}int main(){ Funtest(); return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 呈贡县| 竹山县| 广河县| 屯门区| 子长县| 临朐县| 广州市| 乌拉特中旗| 宜兰县| 崇礼县| 四子王旗| 常德市| 靖西县| 潮安县| 潜江市| 五大连池市| 东山县| 苏尼特左旗| 左贡县| 玉林市| 泗洪县| 大姚县| 河津市| 定南县| 河池市| 马山县| 灌阳县| 临沭县| 遂川县| 普洱| 榆中县| 镇康县| 平昌县| 五指山市| 乐清市| 新宁县| 亚东县| 吕梁市| 清水河县| 嘉善县| 凤翔县|