13、以物件管理資源
(1)、為防止資源洩漏,請使用RAII物件,它們在建構函式中獲得資源並在解構函式中釋放資源
(2)、使用智慧指標。shared_ptr、auto_ptr
14、在管理資源類中注意copying行為
(1)、複製RAII物件必須一併複製它所管理的資源(記憶體、檔案、鎖),所以資源的coping行為取決於RAII物件的copying行為;
(2)、普遍常見的RAII class copying行為是:禁止複製(繼承Uncopyable)、採用引用計數法(shared_ptr),或者其他方法。
15、在資源管理類中提供對原始資源的訪問
(1)、資源管理類中應該提供訪問其原始資源的介面;
(2)、顯式轉換(提供函式,如shared_ptr的get),隱式轉換(重寫operator)。一般顯式比較安全,但隱式轉換比較方便。
16、成對使用new和delete時要採用相同的形式
(1)、new-->delete
(2)、new[]-->delete[]
17、以獨立語句將物件置入智慧指標
(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