如何應用C 的函式物件

2022-10-03 17:57:12 字數 1071 閱讀 8294

前言

c++函式物件是通過一張虛函式表來實現的。簡稱為v-table。在這個表中,主是要乙個類的虛函式的位址表,這張表解決了繼承、過載的問題,保證其容真實反應實際的函式。

應用假如我們實現了這樣的乙個單向鍊錶:

class linkedlistnode ;

class linkedlist ;

其中insert將p插入到head_為頭指標的鍊錶中,而p對應的記憶體由外面分配好,呼叫的時候類似於這樣:

linkedlist list;

linkedlistnode *p www.cppcns.com= new linkedlistnode(2, null);

list.insert(p);

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

這個類的del函式應該如何實現呢?如果節點是new出來的,我們得delete;如果是malloc出來的,我們得www.cppcns.com使用配套的free。否則,行為就是undefined。而且,使用者還可能實現了自己的定製的記憶體分配**例程。我們並不知道該記憶體是如何分配得到的。這就是問題所在。

解決方法是讓使用者將正確的、對應的、適配的資源釋放例程傳遞進來,然而delete是expression,free是函式,更悲劇的是不同使用者實現的資源**函式原型不盡相同。如何做呢?函式物件是解決這個問題的利器。

我們可以這樣:

template

class linkedlist

;在del中:

void del(linkedlistnode *p)

使用者需要實現自己的callback類程式設計客棧的operator()成員函式。如下所示:

class myreclaimroutine };

然後就萬事大吉了:

linkedlist list;

linkedlistnode *p = new linkedlistnode(2, null);

list.insert(p);

list.del(p);//ok! delete p will be called

總結本文標題: 如何應用c++的函式物件

本文位址:

C 如何向函式傳遞物件

一.值傳遞 函式中如果對物件進行了修改,物件的值不變 相當於建立物件的乙個副本傳遞給函式 include using namespace std class test test void setnum int a int getnum private int num 值傳遞 void add tes...

C 的函式物件

函式物件,又叫仿函式或函式子,英文是 function object 或 functor.乙個實現了函式呼叫操作符 即 operator 的類或結構體,就是仿函式。operator 就叫做函式呼叫操作符,英文是 function call operator.下面是乙個例子。include inclu...

c 函式物件

標準庫里的count if可以統計容器中滿足特定條件的元素的個數。例如要統計乙個整數vector ivec中正數的個數,可以先寫乙個返回型別為bool,含有乙個int引數的條件函式 class pred 這樣,剛才的統計語句就應該寫成 count if ivec.begin ivec.end pre...