開闢了記憶體空間,必定要釋放記憶體空間,如果不釋放就會造成記憶體洩漏,引發安全問題。
如果**量很少的時候,我們會記得釋放掉開闢的空間,但是如果**量過大,我們會忘記開闢的空間,那麼就需要智慧型指標來幫助我們自動釋放空間。
例如:
#include
intmain()
有了智慧型指標,下面的釋放空間的語句我們就不需要了。
但是有個疑問,智慧型指標不應該是指標嗎?
走到定義之後,我們會發現auto_ptr不是乙個指標,而是乙個類,ap就是乙個物件,它會像指標一樣使用。
那麼,智慧型指標到底是怎樣實現的,那我們就只有進入底層去深入剖析了。
首先是它的建構函式,
其次是拷貝建構函式,擁有權的釋放
把指標_myptr保留,然後將自己賦值成空
然後是運算子的過載
返回_myptr指標指向的值
接下來是賦值語句,將自己的物件的擁有權釋放掉,再重新設定給當前要賦值的物件
如果是指向不同空間的指標,釋放當前指標_myptr,把新的空間的指標_ptr給_myptr,讓_myptr管理新的空間
最後是析構函式
將空指標_myptr釋放
智慧型指標有很多的分類
c++98
auto_ptr
c++11
unique_ptr
boost庫
scoped_ptr(不允許擁有權的轉移)
scoped_array
shared_ptr
shared_array
weak_ptr
instrusive_ptr
智慧型指標初步認識 自己實現
目的 new出來的物件,需要程式設計師自己釋放堆上的空間,智慧型指標就是把堆上的空間同棧一起釋放 過載 讓智慧型指標像普通指標一樣使用 分析更簡單明瞭 include using namespace std class person void showage person private int m...
指標初步認識
int a 10 p p a 0 p a 形式 含義 p p先加1,再取p的值 p p指向的物件加1 有 p 和 p 先取 p的值,再p 指標間可以相減,不可相加,相加無實際意義。說明 是變址運算子,即a i a i 使用指標指向陣列元素注意事項 1.可以通過改變指標變數的值指向不同元素 2.不用p...
智慧型指標 強弱智慧型指標
在平時編寫 的時候經常會用到new來開闢空間,而我們開闢出來的空間必須得手動去delete他,但是如果程式設計師忘記去手動釋放那邊會出現乙個麻煩的問題,記憶體洩漏!或者是一塊記憶體被多個函式同時使用時,如果其中乙個函式不知道還有其他人也在使用這塊記憶體而釋放掉的話同樣也會引起程式的崩潰。引起記憶體洩...