智能指针:-和*运算符重载 + 模板技术 实现智能指针(C++)
生活随笔
收集整理的這篇文章主要介紹了
智能指针:-和*运算符重载 + 模板技术 实现智能指针(C++)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
智能指針介紹
在C++中,我們都知道在堆區new 開辟的內存,必須通過delete 進行內存釋放,不然會形成內存泄漏。有時候我們使用了new 后在 寫了很多代碼,忘記delete 也是很正常的。那么我們可以使用智能指針來避免這種情況,當new內存的使用將放到智能指針內,就可以不用考慮釋放問題了。智能指針會幫助我們實現在堆區new的內存的釋放。
智能指針原理
我們的智能指針類,肯定要包含一個 原始的指針,智能指針 在棧上開辟,那么智能指針一定會被釋放掉,一定會走智能指針的析構函數,所有我將 真正在堆上new的內存在 智能指針的析構函數進行釋放!
我們將智能指針包裹普通指針后,但是我們還想和原來使用普通指針一樣使用-> 和 * 。那么肯定要重載運算符,將原始指針進行返回!
代碼不是很多長,主要就是->、* 運算符的重載 和 模板技術的應用。下面請看代碼:
智能指針實現代碼
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> using namespace std; //Person類測試 智能指針 class Person { public:Person(int age,string name){cout << "Person(int age,string name)" << endl;m_Age = age;m_Name = name;}~Person(){cout << "~Person()" << endl;}//顯示人物信息void showInfo(){cout << "name = " << m_Name << ", age = " << m_Age << endl;}private:int m_Age;string m_Name; };//模板 + 指針運算符重載 構成智能指針 template<class classType> class SmartPointer { public:SmartPointer(classType* pointer){cout << "SmartPointer(classType* pointer)" << endl;this->pointer = pointer;}~SmartPointer(){cout << "~SmartPointer()" << endl;if (this->pointer != NULL){delete this->pointer;}}//重載 -> 指針運算符classType* operator->(){return this->pointer;}//重載 * 解引用運算符classType& operator*(){return *(this->pointer);} private:classType* pointer; };int main05(int argc, char *argv[]) {/*智能指針 只能在棧上建立,這樣智能指針一定可以被釋放,那么普通指針就 可以不用管釋放的問題,統一由智能指針幫忙釋放實質上用智能指針 將普通指針包起來。*/SmartPointer<Person> p = SmartPointer<Person>(new Person(18, "Laymond"));p->showInfo();(*p).showInfo();return EXIT_SUCCESS; }代碼運行結果
看到沒有,智能指針 自動幫忙進行釋放,而且使用方式和原來普通指針沒有區別喲。
總結
以上是生活随笔為你收集整理的智能指针:-和*运算符重载 + 模板技术 实现智能指针(C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vim 配置(常)
- 下一篇: 查找算法:斐波那契查找算法实现及分析