為了解決指標懸掛這個問題
有下面兩種方法
1、使用智慧型指標(看了c++primer才知道的)
2、在拷貝建構函式和賦值操作符中為左運算元重新分配資源,然後複製內容(即使用深拷貝)
智慧型指標是讓多個物件的指標指向乙個空間,共享這一空間(共享也是有壞處的)
智慧型指標是使用乙個計數器,當該計數器為0時才會釋放指標指向的記憶體
每次建立新類的物件時,初始化指標並將計數置為1
當呼叫複製建構函式時,計數+1
當呼叫賦值函式時,左運算元的計數-1,右操作的計數+1
//使用智慧型指標
#include
#include
usingstd::cout;
usingstd::endl;
classperson;
classauto_ptr
~auto_ptr()
};
classperson
person(const
person&p):age(p.age),ptr(p.ptr)//計數自加
void
set_age(inta)
void
set_name(char *n)
person& operator=(const
person&rhs);
//當計數為0時,才釋放記憶體
~person()//&&操作符左邊真才判斷右邊的性質真是太好了
intget_age()
char* get_name()
void
check_use()
private:
intage;
auto_ptr *ptr;
};
person& person::operator=(const
person&rhs)
intmain()
如果使用智慧型指標還是要看類是怎麼設計實現的,明白這個思想就好。。
智慧型指標讓我明白了一點點string類 copy on write的思想
指標懸掛問題
為了說明什麼是指標懸掛問題,讓我們考慮下面使用簡單字串類string的程式例子 include string.h class string string void main 在上列程式中,我們沒有為string類過載賦值運算子,因此,賦值表示式 s1 s2 是使用預設的賦值運算子完成s2對s1的賦值...
懸掛指標與野指標
owed by 春夜喜雨 懸掛指標 dangling pointers 迷途指標 懸垂指標 野指標 wild pointers 懸掛指標是由於 指標的指向記憶體被刪除導致 例子1 退出if的範圍之後,c變數不再存在,p指向的位址被作業系統 了。指標被懸掛了,後續如果再被使用就會有問題。int p n...
懸掛指標問題例項
今天在寫 的時候遇到乙個問題,當然本身我也是寫乙個小的例子測試記憶體的分配和釋放的問題,一下子碰到了這個懸掛指標的問題 錯誤 include include int main void int b int malloc sizeof int b p free b b null return 0 這段...