智慧型指標的乙個bug

2021-06-09 00:05:29 字數 473 閱讀 2267

先show乙個例項:

class father

~father(){}

virtual void fun();

class mother

~mother(){}

virtual void test(int a);

class son:publicfather ,public mother

~son(){}

void fun();

int _tmain(int argc,_tchar* argv)

這個程式編譯沒有問題,執行時崩潰。但是將mother的test函式前的virtual去掉時,執行結果才是正常的。從c++虛函式的角度,是不應該執行時崩潰的。不用智慧型指標,直接使用裸指標,執行時結果正常。如下:

int _tmain(int argc,_tchar* argv)

這從側面說明了智慧型指標的這個bug.

編寫乙個智慧型指標類

比起一般指標,智慧型指標會自動地管理記憶體 釋放不需要的記憶體 而不需要程式設計師去操心。它能避免迷途指標 dangling pointers 記憶體洩漏 memory leaks 分配失敗等情況的發生。智慧型指標需要為所有例項維護乙個引用計數,這樣才能在恰當的時刻 引用計數為0時 將記憶體釋放。i...

自己實現乙個智慧型指標

要實現乙個智慧型指標主要實現下面幾個函式 1 建構函式 2 拷貝建構函式 3 析構函式 4 賦值運算子函式 5 獲取引用計數函式 重點 1 構造,拷貝構造 1 2 析構函式會使引用計數 1.3 賦值運算子會使之前的引用計數 1。使新賦值過來的引用計數 1 include template class...

智慧型指標(一)

c 程式設計中使用堆記憶體是非常頻繁的操作,堆記憶體的申請和釋放都由程式設計師自己管理。管理是麻煩點 e.g.手動釋放等 但無傷大雅,勉強可以接受 但要命的是,容易出問題 為了解決該問題,c 11 引入智慧型指標概念使記憶體管理變得更為方便,且不易出錯 智慧型指標包含在標頭檔案中,包括 shared...