C Prime13章學習筆記

2021-10-03 12:22:51 字數 1679 閱讀 6591

13.1.1 拷貝建構函式

當乙個建構函式的第乙個引數是自身型別的引用,且任何額外引數都有預設值,則此建構函式為拷貝建構函式

class

foo~hashptr

;

在進行拷貝的過程中,有可能指標指向同一記憶體,在呼叫構析函式時,會發現函式已經釋放。

13.1.5 使用=default

我們可以通過將拷貝控制成員定義為=default來顯示的要求編譯器生成合成建構函式。

class

sales_data

13.1.6阻止拷貝

定義刪除的函式

struct nocopy

hasptr

(const hasptr &p):ps

(p.ps),i

(p.i)

,use

(p.use)

hasptr&

operator=(

const hasptr&

) ps = rhs.ps;

use = rhs.use;

return

*this;}

~hasptr()

private

: string *ps;

int i;

size_t *use;

};

在使用swap函式的時候,採用交換指標的方式比拷貝的方式效率更高。

在呼叫swap函式時應該呼叫swap而不是std::swap。

13.6.1 右值引用

右值引用是指必須繫結到右值的引用。通常用&&來獲得。右值引用只能繫結乙個即將銷毀的物件。

與左值引用的區別,左值有持久的狀態,右值要麼是字面常量,要麼是表示式求值過程中建立的臨時物件。

可以通過呼叫utility標頭檔案中的move標準函式來顯示的將乙個左值引用轉換為右值引用。

int

&&rr3 = std::

move

(rr1)

13.6.2移動建構函式和移動賦值函式

與拷貝建構函式和拷貝賦值函式的區別:這兩個成員類似對應的拷貝操作,但它們從給定物件竊取資源而不是拷貝資源。

類似拷貝建構函式,移動建構函式的第乙個引數是乙個右值引用。與拷貝建構函式一樣。任何額外的引數都必須有預設實參。

example:

strvec::

strvec

(strvec &&s)

noexcept

//移動操作不丟擲任何異常。

//成員初試化接管s中的資源

: elements

(s.elemets)

,first_free

(s.first_free)

,cap

(s.cap)

{ s.elements = s.first_free = s.cap =

nullptr

;

與拷貝建構函式不同,移動建構函式不分配記憶體;它接管給定的strvec中的記憶體。在接管記憶體後,它給制定物件的指標都置為nullptr。這樣就完成了給定物件的移動操作。

不丟擲異常的移動建構函式和移動賦值運算子必須標記為noexcept

移動賦值運算子

移後源物件必須可析構

C Prime14章學習筆記

過載的運算子是具有特殊名字的函式,它由關鍵字 operator與後面定義的符號組成,過載函式包含返回型別,引數列表以及函式體。過載運算子的引數數量與該運算子的作用的運算物件數量一樣多。如果乙個運算子函式是成員函式,則其第乙個運算物件繫結到this指標上。注意 對於乙個運算子函式來說,它或者是類的成員...

《C Prime》第2章 閱讀筆記

2018 01 29 20 23 當乙個算術表示式中既有無符號數又有int值時,int值會轉換成為無符號數。相比於int a 3.14 和int a 3.14 當用於內建型別時,如果我們使用列表初始化且初始值存在丟失資訊的風險,則編譯器會報錯。定義在函式體內部的內建型別變數將不被自動初始化。下劃線開...

第13章 學習shell scripts

使用純文字檔案,將shell 的語法和指令 含外部指令 寫入文字,搭配正規表示法,管線命令,資料流重導向等功能,並提供陣列,條件,判斷,迴圈等重要功能,讓使用者以shell 來編寫程式,達到特定的功能。1.1 幹嘛學習shell scripts 自動化管理的重要依據。管理系統的工作,如service...