EC 學習筆記 三 資源管理

2022-07-09 13:39:14 字數 1862 閱讀 7392

條款13:以物件管理資源

資源包括:動態分配記憶體、檔案描述符、網路socket、互斥鎖、資料庫連線

把資源放進物件內,可以依賴c++的"析構函式自動呼叫機制"確保資源被釋放

智慧型指標: 是乙個"類指標"物件,引用計數型指標,當引用物件數為0時,自動刪除該資源

std::shared_ptrpclass(new class);

每一筆資源都在獲得的同時立刻被放進管理物件中

條款14:在資源管理類小心copy行為

raii:資源獲取即初始化,資源在建構函式期間獲得,析構函式期間釋放

class

lock

~lock()

private

: mutex*mutexptr;

};

當乙個raii物件被複製時:

a.禁止複製:將copy函式宣告為 private 且只宣告不實現

b.引用計數:std::shared_ptr

shared_ptr 允許指定所謂的"刪除器"(乙個函式或函式物件),當引用計數為0時便被自動呼叫

class

lock

private

: std::shared_ptr

mutexptr;

};

c.複製底部資源,深度拷貝

d.慎用:auto_ptr,轉移底部資源的擁有權,資源的擁有權會從被複製物件轉移到目標物件

條款15:在資源管理類中提供對原始資源的訪問

std::shared_ptrpclass(new class);

現在某個函式要求訪問原始資源:

int func(const class *pclass);

如果我們呼叫:int result = func(pclass);

此時錯誤,因為func函式需要的是 class* 指標(原始指標),而不是std::shared_ptr

shared_ptr提供乙個get成員函式,用來執行顯式轉換,會返回智慧型指標內部的原始指標(的拷貝)

條款16:成對使用 new 和 delete 時要採用相同形式

如果 delete 加上中括號,delete 便認定指標指向乙個陣列,否則認定指標指向單一物件

string* stringptr1 = new

string

;string* stringptr2 = new

string[100

];delete stringptr1;

//刪除單一物件

delete stringptr2; //

刪除由物件組成的陣列

條款17:以獨立語句將newed物件置入智慧型指標

int func(std::shared_ptr(new widget), func1());

在呼叫func之前,編譯器必須建立**,做一下三件事:

1.呼叫func1()

2.執行 new widget

3.呼叫shared_ptr的建構函式

c++編譯器並未指定這3件事的執行次序

如果編譯器按 2--->1--->3 的次序執行

當執行func1出現異常時, new widget返回的指標並未成功置入 shared_ptr內,可能引發資源洩露

解決方法:以單獨語句將newed物件置入智慧型指標內

std::shared_ptrpw(new

widget);

func(pw, func1());

Eclipse資源管理(三)

關於marker的使用 描述 在eclipse中marker是用來 級別的各種狀態資訊的乙個框架,使用marker可以輕鬆的瀏覽和定位檔案中的錯誤或其他的一些資訊。1.定義marker,在eclipse中已經定義了一些marker,但是在我們使用的時候,也有可能需要定義自己marker。如下是ecl...

SSH(三)資源分類和日誌管理

上篇博文已經分別介紹了如何搭建 ssh開發環境以及對 ssh三個框架的整合。整合完成之後,我們基本上就可以正常的開始乙個基於 ssh框架開發的專案了。本篇博文介紹的資源分類和日誌管理都是一些錦上添花的配置。利用這些,來清晰我們的思路,便利我們的程式設計。先來說說資源分類吧。這裡的資源分類是指對專案中...

Effective C 筆記 3 資源管理

class investment investment createinvestment 返回指標,指向investment繼承體系內的動態分配單元void f 把資源放入物件內,便可依賴c 的析構函式自動呼叫機制確保資源被釋放 許多資源被動態分配與堆中,而後被用於單一區塊或函式內,他們應該在控制流...