[學習操練]C++智慧指標類的簡單實現(類模板實現)
阿新 • • 發佈:2019-01-14
問題的提出
在使用指標的過程中,我們有時需要動態的分配指標,在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;
}
在程式執行結束後,會自動呼叫智慧指標類物件的解構函式,在解構函式中進行記憶體的釋放。以及避免了多次釋放。