C++中的指针特征操作符重载
生活随笔
收集整理的這篇文章主要介紹了
C++中的指针特征操作符重载
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1 C++中的指針特征操作符重載
- 1.1 指針特征操作符重載
- 1.2 使用指針特征操作符重載實(shí)現(xiàn)智能指針
1 C++中的指針特征操作符重載
1.1 指針特征操作符重載
指針特征操作符重載:
- 可以重載指針特征操作符(->和*)。
- 只能通過類對(duì)的成員函數(shù)重載。
- 重載函數(shù)不能使用參數(shù)。
- 只能定義一個(gè)重載函數(shù)。
- 重載指針特征符能夠使用對(duì)象代替指針。
1.2 使用指針特征操作符重載實(shí)現(xiàn)智能指針
內(nèi)存泄漏(臭名昭著的bug):
- 動(dòng)態(tài)申請(qǐng)堆空間,用完不歸還。
- C++語言沒有垃圾回收的機(jī)制。
- 指針無法控制所指堆空間的生命周期。
我們需要什么:
- 需要一個(gè)特殊指針。
- 指針生命周期結(jié)束時(shí)主動(dòng)釋放堆空間。
- 一片堆空間最多只能由一個(gè)指針標(biāo)識(shí)。
- 杜絕指針運(yùn)算和指針比較。
智能指針的使用軍規(guī):只能用來指向堆空間中的對(duì)象或者變量。智能指針的意義在于最大程度的避免內(nèi)存問題。
智能指針的實(shí)現(xiàn):
#include <iostream> #include <string>using namespace std;class Test {int i; public:Test(int i){cout << "Test(int i)" << endl;this->i = i;}int value(){return i;}~Test(){cout << "~Test()" << endl;} };class Pointer {Test* mp; public:Pointer(Test* p = NULL){mp = p;}Pointer(const Pointer& obj){mp = obj.mp;const_cast<Pointer&>(obj).mp = NULL;}Pointer& operator = (const Pointer& obj){if( this != &obj ){delete mp;mp = obj.mp;const_cast<Pointer&>(obj).mp = NULL;}return *this;}Test* operator -> (){return mp;}Test& operator * (){return *mp;}bool isNull(){return (mp == NULL);}~Pointer(){delete mp;} };int main() {Pointer p1 = new Test(0);cout << p1->value() << endl;Pointer p2 = p1;cout << p1.isNull() << endl;cout << p2->value() << endl;return 0; }參考資料:
總結(jié)
以上是生活随笔為你收集整理的C++中的指针特征操作符重载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 四川人怎么做紫苏焖鸭?
- 下一篇: 有哪些地方的年夜饭是必吃的?