日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中的指针特征操作符重载

發(fā)布時(shí)間:2025/4/5 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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; }

參考資料:

  • C++深度解析教程
  • 總結(jié)

    以上是生活随笔為你收集整理的C++中的指针特征操作符重载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。