国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

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

C++Primer第五版 第十三章習題答案(21~30)

2019-11-06 06:17:27
字體:
來源:轉載
供稿:網友

21:知識點:判斷一個類是否需要拷貝控制函數成員,首先判斷其是否需要自定義版本的析構函數,如果需要,則拷貝控制成員函數都需要。由于這兩個類中的指針為智能指針,可以自動控制內存的釋放,所以使用類的合成析構函數即可。另外類默認的拷貝控制成員對于智能指針的拷貝也不需要自定義版本來修改,所以全部定義為 =default 即可

22:知識點1:管理類外資源的類必須定義拷貝控制成員

知識點2:為了定義拷貝控制成員,我們可以定義拷貝操作,使得類的行為看起來像是一個值或者一個指針

知識點3:類的行為像一個值,拷貝發生時,副本和原對象是完全獨立的,改變副本不會對原對象產生影響

知識點4:類的行為像一個指針,拷貝發生時,副本和原對象共用底層數據,改變副本也會改變原對象

知識點5:標準庫容器和string類就是像值的類,shared_ptr類就是像指針的類,IO類和unique_ptr不允許拷貝和賦值,所以都不是

class Hasptr{public:	Hasptr();//默認構造函數	//拷貝構造函數,完成string 指針指向內容的拷貝和i值的拷貝	Hasptr(const Hasptr& p):ps(new string(*p.ps)),i(p.i){}	//拷貝賦值運算符	Hasptr& Operator= (const Hasptr& p)	{		auto new_ps = new string(p.ps);		delete ps;		ps = new_ps;		return *this;	}	//析構函數	~Hasptr(){delete ps;}PRivate:	string *ps;	int i;};

23:知識點1:類值版本,類的構造函數需要可能需要動態分配其成員的副本

知識點2:類值版本,類的拷貝賦值運算符相當于結合了構造函數和析構函數的操作,首先銷毀左側運算對象的資源,再從右側運算符對象拷貝資源,注意順序

知識點3:由于有上述的順序存在,所以我們必須保證這樣的拷貝賦值運算符是正確的:首先將右側運算對象拷貝到一個臨時的對象中,再銷毀左側的運算對象的現有成員,之后將臨時對象中的數據成員拷貝至左側對象中(防范自賦值的情況發生—首先就銷毀了自身的成員,再進行拷貝自身則會訪問到已經釋放的內存中)

見22題,編寫時忘了一個析構函數,ps在構造函數中是動態分配的內存,所以需要進行delete

24:未定義析構函數,ps在使用結束后不會被合成版本的析構函數釋放,造成內存泄漏。未定義拷貝構造函數,使用自定義版本的拷貝構造函數,對于ps的拷貝就會是指針本身的拷貝。

25:動態分配的內存由shared_ptr管理,析構函數之后會自動判斷進行釋放,所以不需要自定義版本的析構函數。

26:知識點1:定義行為像指針的類,在不想使用shared_ptr的情況下我們可以使用引用計數來確定是否釋放內存

知識點2:每個構造函數(拷貝構造函數除外)都創建一個引用計數,記錄對象的共享狀態,第一次被新建時,計數為1

知識點3:析構函數遞減引用計數,拷貝賦值運算符遞增右側對象的引用計數,遞減左側的,當左側的引用計數為0時,拷貝賦值運算符就必須銷毀狀態

知識點4:計數器不能直接作為類對象的成員,否則在拷貝中,會出現歧義,我們可以將計數器保存在動態內存中,只定義一個指向計數器的指針,這樣拷貝或者賦值時,我們拷貝該指針,副本和原對象指向同樣的計數器

class Hasptr1{public:	//構造函數,初始化相關成員	Hasptr1(const string& s = string()):ps(new string(s)),i(0),use(new size_t(1)){}	//拷貝構造函數,將引用計數也拷貝過來,并且遞增引用計數	Hasptr1(const Hasptr1& p):ps(p.ps),i(p.i),use(p.use){++*use;}	//拷貝賦值運算符	Hasptr1& operator= (const Hasptr1& p1)	{		++*p1.use;//首先遞增右側運算符對象的引用計數		if (--*use == 0)//遞減本對象的引用計數,若沒有其他用戶,則釋放本對象的成員		{			delete ps;			delete use;		}		ps = p1.ps;//進行拷貝		use = p1.use;		i = p1.i;		return *this;	}	//析構函數	~Hasptr1()	{		if (*use == 0)//引用計數變為0,說明已經沒有對象再需要這塊內存,進行釋放內存操作		{			delete ps;			delete use;		}	}private:	//定義為指針,是我們想將該string對象保存在動態內存中	string *ps;	size_t *use;//將計數器的引用保存	int i;};

28:(a)類似于27題   (b)只有一個指針成員,參照27題

29:知識點1:如果一個類定義了自己的swap,那么算法將利用類自己的版本(重排順序等算法)

知識點2:自定義版本的swap存在的必要性:我們不希望進行新的內存分配,只希望將其指針進行拷貝賦值(交換的本質),省去不必要的內存分配,將函數定義為friend,以便訪問private成員

知識點3:相對于拷貝控制成員,swap并不是不要的,但是對于那些分配了資源的類,定義swap可能是一種很重要的優化手段

知識點4:swap函數自定義版本與std中版本的重合問題:對于swap函數,其調用應該都是不加限定的,若加std::swap則調用的是標準庫的版本,而標準庫的版本在一定程度上是為了那些內置類型沒有自定義版本的swap而準備的,若一個類有其自定義版本的swap函數,則我們就不應該使用std版本的。所以我們只要在前加上using std::swap聲明,即可,在使用中,若有類特定的swap,其匹配程度則會優于std中的版本(616頁有詳解)

知識點5:在賦值運算符中使用swap,以傳值的方式傳入新對象,再進行拷貝賦值,在一定程度上會比較安全

見知識點4,因為其調用到最后使用的是std中的swap,不存在循環

30:

class Hasptr{	friend void swap(Hasptr&,Hasptr&);public:	Hasptr();//默認構造函數	//拷貝構造函數,完成string 指針指向內容的拷貝和i值的拷貝	Hasptr(const Hasptr& p):ps(new string(*p.ps)),i(p.i){}	//拷貝賦值運算符	Hasptr& operator= (const Hasptr& p)	{		auto new_ps = new string(*p.ps);		delete ps;		ps = new_ps;		return *this;	}	//析構函數	~Hasptr(){delete ps;}private:	string *ps;	int i;};inline void swap(Hasptr& a,Hasptr& b){	using std::swap;	swap(a.ps,b.ps);	std::swap(a.i,b.i);	cout<<"123";}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
国产精品99999| 在线色视频网| 99在线播放| 国产高清免费av在线| 轻轻色免费在线视频| 天天操夜夜做| 中文字幕高清av| 精品国产美女福利到在线不卡| 91午夜在线| 亚洲视频在线网| 日本在线天堂| 99视频资源网| 在线激情网站| 中文字幕日本在线观看| 国产成免费视频| 久草福利资源在线视频| 91福利在线免费| 午夜影院在线免费观看| 国内a∨免费播放| 国产呻吟对白刺激无套视频在线| 国产福利在线播放麻豆| 亚洲综合天堂网| 国产一级性片| 波多野结衣中文字幕久久| 国产精品久久在线| 久草亚洲一区| 夜色资源网av在先锋网站观看| 国产永久av在线| 青草视频在线播放| 国产精品18久久久久久久久久 | 国产激情视频一区二区三区| 在线观看中文字幕一区| 国产女人在线观看| av首页在线| 精品一区二区三区在线成人 | 久久久久久久久亚洲精品| 国产精品自产拍在线观看2019| 国产欧美一区二区三区小说| 青青草原av在线| 国产黄色av免费看| 国产麻豆麻豆| 久草网在线视频| 九九在线视频| 国产麻豆视频网站| 国产永久av在线| 九色成人在线| 国产免费福利网站| 九九热在线免费视频| 免费在线黄色网址| 国产中文字幕网| 国产在线高潮| 高清视频一区二区三区四区| 男人天堂网在线观看| 四虎成人欧美精品在永久在线| 永久av在线| 日本aⅴ写真网站免费| 免费看的毛片| 国产小视频在线| 99久热re在线精彩视频| 一级二级三级在线观看| 亚洲成人福利| 久久91精品视频| 国产偷倩在线播放| 在线中文资源天堂| 在线播放国产区| 免费女人毛片视频| 国产免费福利网站| 国产精品久久久久久精| 精品视频二区三区| 蜜桃av在线免费观看| 国产精品666| 日本在线天堂| 国产视频中文字幕| 日本不卡影院| 2021天堂中文幕一二区在线观| www.狠狠操.com| 国产一二三四| 四虎免费视频| 69国产精品| 国产麻豆一级片| av色在线观看| 中文字幕高清av| 国产在线观看av| 日本一二区视频| 97高清视频| 国产精品69xx| 国产精选在线观看| 欧美亚洲另类在线观看| 免费看的av| av在线电影观看| 青青青国产视频| 在线āv视频| 91亚洲天堂| 国产精品视频一区麻豆| 毛片在线视频| 色综合久久五月天| 中文字幕在线影院| 毛片在线视频| 开心婷婷激情| 免费男女羞羞的视频网站中文字幕| 国产激情网址| 国产国语**毛片高清视频| 九九热在线观看视频| jizz亚洲| yjizz视频网站在线播放| 精品美女在线观看视频在线观看 | 四虎a级欧美在线观看| 中文岛国精品亚洲一区| 精品视频一二区| 69日小视频在线观看| 国产麻豆精品视频一区二区 | 黄色av网站在线| 国产在线观看a视频| 麻豆精品传媒视频观看| 久久er视频| 成人日韩欧美| 国产经典av| 夜夜爽夜夜操| 九九视频精品在线| 日本电影在线观看| 日本中文字幕在线观看| 国产一级片麻豆| 91午夜在线| 免费国产阿v视频在线观看| 九九热免费视频| 国产特级嫩嫩嫩bbb| 精品久久久久一区二区三区| www.综合网.com| 国产精品亚洲色图| 91最新在线| 国产中文在线视频| 2019年中文字幕| 国产在线中文字幕| av首页在线| 国产麻豆视频免费观看| 国产精品99999| 欧美日韩久久中文字幕| 国产视频xxx| 免费精品国产自产拍观看| 国产精品被窝福利一区 | 国产精品第八页| 亚洲va国产日韩欧美精品色婷婷| av在线播放网| 国产精品福利视频一区二区三区| 97视频网站| 国产午夜电影| 国产在线观看18| 日韩黄色成人| ·天天天天操| 国产日本在线观看| 激情丁香在线| 人人九九精品| 亚洲精品乱码电影在线观看| 国产精品白浆视频免费观看| 国产美女福利在线观看| 四虎成人免费| eeuss影院在线播放| 在线国产一区二区三区| 91午夜视频| 国产极品嫩模在线视频一区| 国产写真视频在线观看| 狠狠操视频网| 国产理论电影在线| 好男人免费精品视频| 欧美日韩综合高清一区二区| 亚洲视频手机在线观看| 中文av在线播放| av麻豆国产| 日本在线免费中文字幕| 亚洲精品影视在线| 任你操视频在线观看| 欧美日韩国产亚洲沙发| 九九免费视频| 中文字幕有码在线视频| 久草网在线视频| 天天操天天艹| 国产欧美黑人| 四虎国产精品永久在线| 玖玖在线视频| 中文字幕在线观看日本| 国产黄视频网站| 中文字幕av免费| 欧美aaa一级片| 国产网站免费观看| av免费在线一区二区三区| 欧美xxxx黑人又粗又长| 最近中文字幕mv免费高清在线| 午夜伦全在线观看| 精品视频一区二区观看| 亚洲尤物在线视频| 久色视频在线观看| 国产精品视频一区二区图片| 在线国产网址| 国产一级免费黄色片| av中文天堂在线| 国产精品入口麻豆电影| 在线看黄网站| 国产欧美黑人| 国产卡二和卡三的视频| 精品日韩av|