一般的函式指標
語法:
返回型別(*函式名)(參數列)
使用示例:
char (*pfun)(int);
char glfun(int a)
void main()
第一行定義了乙個指標變數pfun,它是乙個指向某種函式的指標,這種函式引數是乙個int型,返回值是char型別。只有第一句我們還無法使用這個指標,因為我們還未對它進行賦值。
第二行定義了乙個函式glfun()。該函式正好是乙個以int為引數返回char的函式。從指標的層次上理解函式——函式的函式名實際上就是乙個指標,函式名指向該函式的**在記憶體中的首位址
在main()函式中,函式glfun的位址賦值給變數pfun。第二句中「*pfun」顯然是取pfun所指向位址的內容,當然也就是取出了函式glfun()的內容,然後給定引數為2。
使用typedef更直觀更方便
語法:
typedef 返回型別(*新型別)(參數列)
使用示例:
typedef char (*ptrfun)(int);
ptrfun pfun;
char glfun(int a)
void main()
typedef的功能是定義新的型別。第一句就是定義了一種ptrfun的型別,並定義這種型別為指向某種函式的指標,這種函式以乙個int為引數並返回char型別。後面就可以像使用int,char一樣使用ptrfun了。
第二行的**便使用這個新型別定義了變數pfun,此時就可以像使用形式1一樣使用這個變數了。
1.auto_ptr
作用:對作用域內的動態分配物件的自動釋放
基本型別:
#include #include using namespace std;
int main()
類型別:
#include #include using namespace std;
class test
~test()
void func()
};int main()
缺點:示例:
#include #include using namespace std;
void func(auto_ptrap)
int main()
2.auto_ptr不能管理陣列指標
#include using namespace std;
int main()
3.auto_ptr被拷貝或被賦值後,失去對原指標的管理.這種情況被稱為指標所有權傳遞
#include #include using namespace std;
int main()
總之來說,智慧型指標auto_ptr,進行值傳遞或者賦值操作時,也就是說觸發了他的拷貝建構函式和賦值運算子過載函式時,就會將原物件儲存的位址刪除,再呼叫時就會出現解引用空指標,從而吐核。2.unique_ptr
作用:代替auto_ptr,禁用複製與賦值。
#include //#include #include using namespace std;
void func(unique_ptrup)
int main()
class integerptr
void print()
};int main()
共享指標的實現:
#include #include using namespace std;
namespace ministl
};data* p;
void decrease()
}public:
shared_ptr(t* ptr = null):p(new data(ptr)){}
shared_ptr(const shared_ptr& ptr)
shared_ptr&operator=(const shared_ptr& ptr)
~shared_ptr()
t&operator*()
t*operator->()
};}using namespace ministl;
int main()
但是共享指標會造成迴圈引用的問題:
#include #include using namespace std;
class b;
class a
~a()
shared_ptrb; //a類中定義了乙個b的智慧型指標作為成員
};class b
~b()
shared_ptra; //b類中定義了乙個a的智慧型指標作為成員
};int main()
結構圖如下:
為了避免這一情況,從而引出weak_ptr。
5.weak_ptr
用weak_ptr解決迴圈引用:
#include #include using namespace std;
class b;
class a
~a()
shared_ptrb; //a類中定義了乙個b的智慧型指標作為成員
};class b
~b()
weak_ptra; //b類中定義了乙個weak_ptr型別的a的智慧型指標作為成員
};int main()
C 智慧型指標學習筆記
原文 摘錄智慧型指標 auto ptr,unique ptr,shared ptr,weak ptr 智慧型指標的作用是管理乙個指標,因為存在一下的情況 申請的空間再函式結束時忘記釋放,造成記憶體洩漏。使用智慧型指標可以很大程度上的避免這個問題,因為智慧型指標是乙個類,當超出了類的例項物件的作用域時...
C 學習筆記之智慧型指標
眾所周知,c 中最讓程式設計師頭疼的就是關於記憶體的問題,其中不外乎以下幾點 1.緩衝區溢位 2.野指標 3.重複釋放記憶體 4.不配對的new delete 5.記憶體洩露 其中大多數的問題都是對指標的不正確使用帶來的。為此c 標準庫中對原始指標做了一些封裝,比如auto ptr,使得指標更容易使...
C 學習筆記15 智慧型指標分析
智慧型指標的實現 include using namespace std template typename t class smartpointer 實現一片堆空間只能由乙個智慧型指標標識 smartpointer const smartpointer obj 也需要實現一片堆空間只能由乙個智慧型...