條款13 以物件管理資源
物件管理資源,防止資源洩露
舉個最簡單例子:
void func()
假如中間出現了異常或者有return等。很有可能就忘記釋放記憶體。
務必遵守以下幾點:
獲取到資源後立即放入管理物件
管理物件運用析構函式確保資源被釋放
void func()
另一種年代比較久遠的智慧型指標是auto_ptr由於它沒有引用計數功能,所以不作講解。
下面自己實現乙個shared_ptr加深理解
template
class mysharedptr
mysharedptr& operator=(mysharedptr& r)
return *this;
}mysharedptr(mysharedptr& r) : m_ptr(r.m_ptr), m_count(r.m_count)
t& operator*() const
t* operator->() const
//獲取原始指標
t* get()
~mysharedptr()
//釋放所有資源
void reset()
//過載輸出
friend ostream& operator
<<(ostream& out, const mysharedptr& obj)
private:
static
void swap(mysharedptr& l, mysharedptr& r)
private:
size_t* m_count;
t* m_ptr;
};
Effective C 學習筆記
學習effective c 已經有相當長的一段時間了,今天抽出時間又堵了一遍第一部分 c語言 c 以c語言為基礎,幾乎支援所有的c語言成分,例如區塊 語句 預處理 內建資料型別 陣列 指標等,c語言的侷限是 沒有模板 沒有異常 沒有過載 物件導向的c 也就是加上了物件特性的c,類 封裝 繼承 多型 ...
Effective C 學習筆記
1 c 是乙個複合式的語言 c 中不同部分有著不同的語言特性,例如 1.1 在c中傳遞形參時,按照值傳遞比按照指標傳遞效率更高 1.2 在物件導向程式中,物件要按照const引用而不是按照值傳遞 1.3 在stl程式設計中採取按照值傳遞方式 所以說c 中沒有統一的準則,要按照不同的特性採取不同的使用...
effective c 學習筆記
如果不考慮應用程式的使用場合,僅僅考慮語言的靈活性,我贊成作者的想法。但是不同的應用它會有不同的效能要求,所以語言的選擇,應該是用 最適合 條款去選擇。使用巨集定義常量,若定義在標頭檔案中,則所有包含標頭檔案的都可以使用。巨集定義,在預處理的時候進行替換。巨集定義一些簡單的函式,可以減少呼叫開銷,但...