1. 程式人生 > >[學習操練]C++智慧指標類的簡單實現(類模板實現)

[學習操練]C++智慧指標類的簡單實現(類模板實現)

問題的提出

在使用指標的過程中,我們有時需要動態的分配指標,在c++中,我們推薦使用new分配記憶體,delete釋放記憶體。在編寫大型程式的時候,有時我們忘記delete分配的記憶體,或者多次釋放分配的記憶體,這樣會造成記憶體洩露和程式的down機。

解決方案

在程式開發中,開發者預先編寫智慧指標類代替原生的指標。

智慧指標的思想

  • 通過建構函式接管記憶體的申請;
  • 通過解構函式確保記憶體被及時釋放;
  • 通過過載指標運算子*和->模擬指標的行為;
  • 通過過載比較運算子== 和 != 來模擬指標的比較。

程式碼示例

[cpp]main.cpp
#define  _CRT_SECURE_NO_WARNINGS 
#include<iostream> using namespace std; template <typename T> class mypointer { public: mypointer() { p = NULL; } mypointer(T *p) { this->p = p; } ~mypointer() { if (p != NULL) { delete p; } } public
: T *operator->() { return p; } T& operator*() { return *p; } private: T *p; }; class Test { private: int a; public: Test() { this->a = 10; } void print() { cout << a << endl; } }; int main() { mypointer<Test> myp = new
Test; myp->print(); mypointer<int> myintp = new int(100); cout << *myintp << endl; return 0; }

在程式執行結束後,會自動呼叫智慧指標類物件的解構函式,在解構函式中進行記憶體的釋放。以及避免了多次釋放。