C++ Primer 5th笔记(chap 13 拷贝控制)三五法则
1. 三個(gè)基本操作可以控制類的拷貝操作
? 拷貝構(gòu)造函數(shù)
? 拷貝賦值運(yùn)算符
? 析構(gòu)函數(shù)。
新標(biāo)準(zhǔn)還有2個(gè)函數(shù):
? 移動構(gòu)造函數(shù)(move constructor)
? 移動賦值運(yùn)算符(move-assignment operator)
2. 二個(gè)法則
原則1:
通常這前3個(gè)函數(shù)作為一個(gè)整體出現(xiàn)。當(dāng)決定一個(gè)類是否要自定義拷貝控制成員時(shí),一個(gè)基本原則就是首先確定這個(gè)類是否需要一個(gè)析構(gòu)函數(shù),如果一個(gè)類需要析構(gòu)函數(shù),幾乎可以肯定它也需要一個(gè)拷貝構(gòu)造函數(shù)和一個(gè)拷貝賦值運(yùn)算符。
class HasPtr{ public:HasPtr(const std::string &s = std::string()):ps,(new std::string(s),i(0)){}~HasPtr(){delete ps;} }如何使用編譯器會合成默認(rèn)的拷貝構(gòu)造函數(shù)和拷貝賦值運(yùn)算符,這些函數(shù)將簡單的拷貝指針成員,這意味著多個(gè) HasPtr 對象可能指向相同的內(nèi)存(會帶來問題的哦)
HasPtr f(HasPtr hp) //HasPtr是一個(gè)傳值參數(shù),所以被拷貝 {HasPtr ret = hp; //拷貝給指定的HasPtrreturn ret; //ret 和 hp 被銷毀 }原則2
需要拷貝操作的類也需要賦值操作,反之亦然,需要拷貝構(gòu)造函數(shù)或者拷貝賦值函數(shù)不一定需要析構(gòu)。
總結(jié)
以上是生活随笔為你收集整理的C++ Primer 5th笔记(chap 13 拷贝控制)三五法则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha