亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

c++中深淺拷貝以及寫時拷貝的實現示例代碼

2020-01-26 13:59:14
字體:
來源:轉載
供稿:網友

本文主要給大家介紹了關于c++中深淺拷貝及寫時拷貝實現的相關內容,分享出來供大家參考學習,下面話不多說,來一起看看詳細的介紹:

一:淺拷貝&深拷貝

淺拷貝:在拷貝構造的時候,直接將原內容的地址交給要拷貝的類,兩個類共同指向一片空間。但是存在很大的缺陷:①一旦對s2進行操作,s1的內容也會改變;②析構時先析構s2,再析構s1,但是由于s1,s2指向同一片空間,會導致一片空間的二次析構導致出錯。

深拷貝:通過開辟和源空間大小相同的空間并將內容拷貝下來再進行操作。不論是否對s2進行操作,都會拷貝一片相同大小的空間以及內容下來。

圖示如下:

深拷貝實現如下:

#include <iostream>using namespace std;class String{public: String(char* str = "") :_str(new char[strlen(str)+1]) { strcpy(_str, str); } //傳統寫法,開辟空間 String(const String& s) { _str = new(char[strlen(s._str) + 1]); strcpy(_str, s._str); } //現代寫法,利用構造函數 //String(const String& s) // :_str(NULL) //{ // String tmp(s._str); // swap(_str, tmp._str); //} //****************賦值運算符重載************** //String& operator=(const String& s) //{ // if (this != &s) // { // delete[] _str; // _str = new char[strlen(s._str) + 1]; // strcpy(_str, s._str); // } // return *this; //} //****************賦值運算符重載************** String& operator=(String& s) { swap(_str, s._str); return *this; } //***************析構函數******************** ~String() { if (_str) {  delete[] _str; } }private: char* _str;};

二:寫時拷貝

寫時拷貝:引入一個計數器,每片不同內容的空間上都再由一個計數器組成,在構造第一個類指向時,計數器初始化為1,之后每次有新的類也指向同一片空間時,計數器加價;在析構時判斷該片空間對應計數器是否為1,為1則執行清理工作,大于1則計數器-1。如果有需要進行增刪等操作時,再拷貝空間完成,有利于提高效率。

寫法一:

#include <iostream>using namespace std;class String{public: String(char* str = "") :_str(new char[strlen(str)]+1) , _refCount(new int(1)) { strcpy(_str, str); } String(const String& str) : _str(str._str) ,_refCount(str._refCount) { (*_refCount)++; } ~String() { release(); } String& operator= (const String& s) { if (_str != s._str) {  release();  _refCount = s._refCount;  (*_refCount)++;  _str = s._str; } return *this; } void release() { if ((*--_refCount) == 0) {  delete[] _str;  delete _refCount; } }private: char* _str; int* _refCount;};

缺點:每構造一個新類,就會多開四個字節,會導致空間中有許多的內存碎片。

第二種:

class String{public: String(char* str = "") :_str(new char[strlen(str)+1+4]) { *(int*)_str = 1; _str += 4; strcpy(_str, str); } String(const String& s) :_str(s._str) { ++GetCount(); } ~String() { release(); } String& operator=(const String& s) { if (this != &s) {  realease();  _str = s._str;  GetCount()++; } return *this; } void release() { if (--GetCount() == 0) {  _str -= 4;  delete[] _str;  } } int& GetCount() { return *((int*)_str - 1); }private: char* _str;};

注意:由于計數器存放在了_str首地址-4的地址上,所以在析構時一定要注意全部釋放,避免內存泄漏。

圖示如下:

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對武林網的支持

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品久久久久久久久中文字幕| 国产精品99久久久久久人| 国产91成人在在线播放| 亚洲最大福利视频网站| 亚洲欧美激情在线视频| 91久久精品日日躁夜夜躁国产| 国产视频欧美视频| 91国自产精品中文字幕亚洲| www.亚洲一区| 日韩精品丝袜在线| 欧美日韩国产区| 精品福利樱桃av导航| 91免费观看网站| 国产日韩精品电影| 日韩精品免费看| 欧美激情第6页| 国产在线播放不卡| 最好看的2019年中文视频| 成人在线视频福利| 亚洲香蕉成人av网站在线观看| 国产视频观看一区| 日韩成人久久久| 国产视频精品一区二区三区| 成人激情综合网| 夜夜躁日日躁狠狠久久88av| 国产精品视频自拍| 国产日韩在线亚洲字幕中文| 欧美一区二三区| 亚洲自拍偷拍视频| 国产精品69精品一区二区三区| 2019日本中文字幕| 国产精品视频资源| 亚洲精品自在久久| 久久久久久有精品国产| 亚洲影院色无极综合| 国产精品扒开腿爽爽爽视频| 亚洲国产精品高清久久久| 欧美精品在线视频观看| 日韩免费看的电影电视剧大全| 国产视频久久网| 日韩中文字幕视频在线| 国产精品大片wwwwww| 中文字幕亚洲欧美日韩2019| 亚洲天堂第一页| 精品国产一区二区三区久久久狼| 国产精品热视频| 欧美一级片免费在线| 97国产在线观看| 91久久久久久久久久久久久| 国产精品久久久久国产a级| 亚洲天堂av女优| 日韩在线观看免费全集电视剧网站| 亚洲精品欧美日韩| 韩曰欧美视频免费观看| 九九精品视频在线观看| 国产精品一区二区三区免费视频| 亚洲综合中文字幕在线| 久久久久久久久久久免费| 欧美激情一级精品国产| 国产97在线播放| 日韩av一卡二卡| 久热99视频在线观看| 九九热在线精品视频| 欧美理论片在线观看| 色综合视频网站| 国产精品免费一区| 成人午夜在线观看| 国产欧美韩国高清| 国产自产女人91一区在线观看| 日韩高清电影免费观看完整版| 欧美重口另类videos人妖| 综合激情国产一区| 欧美日韩国产综合视频在线观看中文| 2019国产精品自在线拍国产不卡| 久久免费少妇高潮久久精品99| 日韩精品中文字幕久久臀| 欧美午夜精品久久久久久浪潮| 亚洲国产一区二区三区在线观看| 亚洲第一网站免费视频| 丝袜一区二区三区| 57pao精品| 国产精品丝袜高跟| 久久精品99无色码中文字幕| 中文字幕亚洲欧美日韩在线不卡| 国内精品视频一区| www.亚洲一二| 国产乱肥老妇国产一区二| 午夜精品在线视频| 成人精品久久av网站| 国产99久久精品一区二区永久免费| 成人av在线网址| 日韩免费中文字幕| 97精品久久久中文字幕免费| 欧美午夜激情在线| 久久视频中文字幕| 国产精品对白刺激| 日韩视频亚洲视频| 色吧影院999| 亚洲精品99久久久久| 亚洲无av在线中文字幕| 国产精品亚洲欧美导航| 成人欧美在线视频| 欧美日韩性生活视频| 久久久噜噜噜久久| 亚洲第一黄色网| 成人a在线视频| 91精品国产综合久久香蕉最新版| 国产精品久久久久久久9999| 国产精品天天狠天天看| 午夜精品久久久久久久男人的天堂| 中文字幕欧美日韩va免费视频| 尤物yw午夜国产精品视频| 日韩电影中文字幕在线观看| 欧美电影在线观看高清| 清纯唯美亚洲激情| 国产精品吹潮在线观看| 亚洲男人天天操| 亚洲品质视频自拍网| 久久国产精品网站| 国产精品久久一| 亚洲国产成人精品女人久久久| 成人写真视频福利网| 亚洲欧美成人一区二区在线电影| 国产精品99久久久久久人| 国产精品成人免费电影| 精品中文字幕视频| 欧美—级a级欧美特级ar全黄| 欧美另类69精品久久久久9999| 国产美女久久精品香蕉69| 中文.日本.精品| 亚洲美女性生活视频| 日本欧美黄网站| 亚洲成人av片在线观看| 亚洲第一福利视频| 一区二区三区久久精品| 欧美韩国理论所午夜片917电影| 欧美极品少妇xxxxx| 日本19禁啪啪免费观看www| 国产精品精品一区二区三区午夜版| 日韩精品999| 97欧美精品一区二区三区| 亚洲国产精品热久久| 在线日韩av观看| 成人网在线观看| 欧美成人亚洲成人日韩成人| 欧美日韩国产成人高清视频| 欧美一性一乱一交一视频| 亚洲二区中文字幕| 国产国产精品人在线视| 亚洲美女av网站| 色综合伊人色综合网| 欧美成人手机在线| 精品国产91久久久久久老师| 这里只有精品久久| 亚洲精品videossex少妇| 国产成人涩涩涩视频在线观看| 国产一区二区在线免费| 国产成人精品电影| 精品久久久久久久中文字幕| 日本久久久久久久久久久| 这里只有精品久久| 亚洲免费成人av电影| 一区二区三区四区在线观看视频| 亚洲福利视频免费观看|