c++中指針的編程習慣

以前一直覺得連內存都管不好,會泄漏的人不適合當程序員

可是最近寫代碼確實的感受到這不是個簡單的問題

就舉個簡單的例子

class A{
public:
A(B *b){}
~A(){
//這裏要不要delete b?
}
private:
B *b;
}

int main(){
B *b = new B();
A *a = new A(b);
delete a;
delete b;//若A中delete b,這裏就會重複delete
}
這個情形還比較簡單,但是當這種嵌套越來越複雜時,就很難說能保證這中間不出錯

另外還有重複delete的問題,重複delete可能導致錯誤delete分配給別的變量的空間

一般delete後對指針置零,可以一定程度上避免這問題

但是像這裏的傳值的情況,置零就無法解決這問題


其實最好是有語言支持,給函數的指針參數加一個修飾詞:managed。(沒看過智能指針,找時間看看)

若是函數的情況,就表示在函數調用結束時,自動delete這個指針

若是類的情況,在對象銷燬時自動delete,這樣,在外部就不允許delete

或者乾脆給指針加個deleted域,new的時候置0,delete時置1,重複delete不操作


當然這只是妄想,使用者只能自己注意了,可能一個比較可行的方法是,變量命名規範

在變量名里加標記,表示當前域或者對象管不管它

下次有空自己定個規範。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章