Effective C++ 筆記(3)資源管理

1三、以對象管理資源

  (1)、爲防止資源泄漏,請使用RAII對象,它們在構造函數中得到資源並在析構函數中釋放資源c++

  (2)、使用智能指針。shared_ptr、auto_ptr安全

1四、在管理資源類中注意copying行爲

  (1)、複製RAII對象必須一併複製它所管理的資源(內存、文件、鎖),因此資源的coping行爲取決於RAII對象的copying行爲;函數

  (2)、廣泛常見的RAII class copying行爲是:禁止複製(繼承Uncopyable)、採用引用計數法(shared_ptr),或者其餘方法。spa

1五、在資源管理類中提供對原始資源的訪問

  (1)、資源管理類中應該提供訪問其原始資源的接口;指針

  (2)、顯式轉換(提供函數,如shared_ptr的get),隱式轉換(重寫operator)。通常顯式比較安全,但隱式轉換比較方便。對象

1六、成對使用new和delete時要採用相同的形式

  (1)、new-->deleteblog

  (2)、new[]-->delete[]繼承

1七、以獨立語句將對象置入智能指針

  (1)、在單獨的語句內以智能指針存儲newed所得的對象,避免拋出異常時,形成難以察覺的資源泄漏。接口

void processWidget(shared_ptr<Widget> pw, int priority);

processWidget(new Widget, priority);//error shared_ptr的構造函數是explicit

processWidget(shared_ptr<Widget>(new Widget), priority()); //error c++處理參數的次序不固定,並不是從右到左。

shared_ptr<Widget> pw(new Widget);
processWidget(pw, priority()); //ok
相關文章
相關標籤/搜索