定製刪除器

2021-08-09 10:02:37 字數 1325 閱讀 6144

定製刪除器的產生:在實現智慧型指標的過程中,我們需要管理資料的構造以及析構,但不同的資料擁有不同的析構方式,例如檔案,new出來的空間等等,在利用模板程式設計中,我們需要識別不同的資料型別,然後選擇合適的刪除機制,做到一一對應。

定製刪除器的實現利用了仿函式,如果你不知道仿函式的話,可以閱讀下面的一小部分。

仿函式:其原理是過載了(),讓它可以像函式一樣使用。

看一段簡單的**:

#include 

using

namespace

std;

template

struct less

};void test()

int main()

下面回到我們的重點,利用仿函式實現定製刪除器(場景選擇為智慧型指標share_ptr的簡單模擬實現)

#define  _crt_secure_no_warnings

#include

using

namespace

std;

template

struct del

};struct free

};struct fclose

};template

class sharedptr

sharedptr(t* ptr)

:_ptr(ptr)

, _pcount(new

long(1))

{}sharedptr(const sharedptr& p)

:_ptr(p._ptr)

, _pcount(p._pcount)

//現**法

sharedptr& operator=(sharedptrtmp)

傳統寫法

//sharedptr& operator=(const sharedptr& tmp)

//// return *this;

//} ~sharedptr()

public:

//像指標一樣

t& operator*()

t* operator->()

protected:

void _relase()

}protected:

t* _ptr;

long* _pcount; //引用記數

delter _del; //定製刪除器

};void test()

int main()

以上就是定製刪除器在shared_ptr中的應用,利用仿函式的機制去實現。

c 定製刪除器

定製刪除器其實是利用仿函式 一 仿函式是什麼?不是函式但可以像函式一樣使用,因為過載了operator 簡單舉例 templatestruct less void test2 二 具體場景 void teat 上述場景中將產生錯誤,因為用fopen開啟,要用fclose關閉 三 定製刪除器舉例 如下...

C 定製刪除器

include include using namespace std template struct free 建立與malloc匹配的刪除器 template struct del 建立與new匹配的刪除器 struct fclose 建立與fopen匹配的刪除器 template 第二個引數則...

shared ptr 定製刪除器 和 迴圈引用

前面我們介紹智慧型指標的時候,說了兩個智慧型指標分別是 auto ptr和scoped ptr,auto ptr有問題,為此,scoped ptr的出現解決了這個問題,scoped ptr太霸道,不允許別人和他共用一塊記憶體空間,所以,我們還得想辦法解決這個問題。回想我們以前看過內容,當提到共用一塊...