欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

如何應(yīng)用C++的函數(shù)對象

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

前言

C++函數(shù)對象是通過一張?zhí)摵瘮?shù)表來實現(xiàn)的。簡稱為V-Table。在這個表中,主是要一個類的虛函數(shù)的地址表,這張表解決了繼承、重載的問題,保證其容真實反應(yīng)實際的函數(shù)。

應(yīng)用

假如我們實現(xiàn)了這樣的一個單向鏈表:

class LinkedListNode {
 int data_;
 LinkedListNode *next_;
};
class LinkedList {
 public:
 void insert(LinkedListNode* &p);
 void del(LinkedListNode *p);
 private:
 LinkedListNode *head_;
};

其中insertp插入到head_為頭指針的鏈表中,而p對應(yīng)的內(nèi)存由外面分配好,調(diào)用的時候類似于這樣:

LinkedList list;
LinkedListNode *p = new LinkedListNode(2, NULL);
list.insert(p);

其中,p可能是通過new得到,也可能是malloc出來。好,問題來了:

這個類的del函數(shù)應(yīng)該如何實現(xiàn)呢?如果節(jié)點是new出來的,我們得delete;如果是malloc出來的,我們得使用配套的free。否則,行為就是undefined。而且,用戶還可能實現(xiàn)了自己的定制的內(nèi)存分配回收例程。我們并不知道該內(nèi)存是如何分配得到的。這就是問題所在。

解決方法是讓用戶將正確的、對應(yīng)的、適配的資源釋放例程傳遞進(jìn)來,然而deleteexpression,free是函數(shù),更悲劇的是不同用戶實現(xiàn)的資源回收函數(shù)原型不盡相同。如何做呢?函數(shù)對象是解決這個問題的利器。

我們可以這樣:

template<typename CallBack>
class LinkedList
{
 public:
 void insert(LinkedListNode* &p);
 void del(LinkedListNode *p);
 private:
 LinkedListNode *head_;
};

在del中:

void del(LinkedListNode *p)
{
 //...
 LinkedListNode *prev = get_prev(p);
 prev->next_ = p->next_;
 CallBack cb;
 cb(p);//調(diào)用用戶提供的資源回收例程
}

用戶需要實現(xiàn)自己的CallBack類的operator()成員函數(shù)。如下所示:

class MyReclaimRoutine { public: void operator() (LinkedListNode *p) { delete p; //free(p) ? my_release_func(p) ? all up to you! } };

然后就萬事大吉了:

LinkedList<MyReclaimRoutine> list;
LinkedListNode *p = new LinkedListNode(2, NULL);
list.insert(p);
list.del(p);//ok! delete p will be called

總結(jié)

以上就是C++函數(shù)對象的應(yīng)用的全部內(nèi)容,希望本文的內(nèi)容對大家學(xué)習(xí)C++的函數(shù)對象能有所幫助,如果有疑問歡迎大家留言討論。

上一篇:圖文詳解c/c++中的多級指針與多維數(shù)組

欄    目:C語言

下一篇:C語言 變量詳解及示例代碼

本文標(biāo)題:如何應(yīng)用C++的函數(shù)對象

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2108.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有