weakptr的作為弱引用指標,其實現依賴於counter的計數器類和share_ptr的賦值,構造,所以需要把counter和share_ptr也簡單實現一下。
counter物件的目地就是用來申請乙個塊記憶體來存引用基數,簡單實現如下:
class counter
; int s;
int w;
};s是share_ptr的引用計數,w是weak_ptr的引用計數,當w為0是,刪除counter物件。
share_ptr的簡單實現如下:
template class weakptr;//為了用weak_ptr的lock(),來生成share_ptr用,需要拷貝構造用
template
class shareptr
friend class weakptr; //方便weak_ptr與share_ptr設定引用計數和賦值。
private:
void release()}}
t* _ptr;
counter* cnt;
};share_ptr的函式介面,構造,拷貝構造,賦值,解引用。通過release來在引用計數為0的時候刪除_ptr和cnt的記憶體。
那麼最後可以給出weak_ptr的實現,如下:
template
class weakptr
weakptr(shareptr& s):
_ptr(s._ptr),cnt(s.cnt)
~weakptr()
weakptr& operator =(weakptr & w)
return *this;
} weakptr& operator =(shareptr & s)
bool expired()
}} t* _ptr;
counter* cnt;
};share_ptr的一般介面是,通過share_ptr來構造,通過expired函式檢查原始指標是否為空,lock來轉化為share_ptr。
測試**如下:
class parent;
class child;
class parent
;class child
;int main()
{ //shareptr ft(new parent());
//shareptr son(new child());
//ft->ch=son;
//son->pt=ft;
//shareptr son2=(ft->ch).lock();
shareptr i;
weakptr wi(i);
cout《通過開啟注釋,可以模擬share_ptr的經典的迴圈引用的案例,也可以檢查指標是否為空。完整**,加入iostream標頭檔案和std的namespace就可以編譯執行了。
智慧型指標weak ptr
智慧型指標weak ptr主要用來協助shared ptr。不參與引用計數,但是有以下好處 1 打破遞迴的依賴關係 2 使用乙個共享的資源但是不要所有權,不新增引用計數 3 避免懸空指標。使用方法有二 方法一 boost shared ptrsp new std string method1 從sh...
智慧型指標 weak ptr
weak ptr是為了配合shared ptr而引入的一種智慧型指標,它更像是shared ptr的乙個助手而不是智慧型指標,因為它不具有普通指標的行為,沒有過載operator 和 它的最大作用在於協助shared ptr工作,像旁觀者那樣觀測資源的使用情況.用法 weak ptr被設計為與sha...
智慧型指標 weak ptr
weak ptr weak ptr是為了配合shared ptr而引入的一種智慧型指標,它更像是shared ptr的乙個助手而不是智慧型指標,因為它不具有普通指標的行為,沒有過載operator 和 它的最大作用在於協助shared ptr工作,像旁觀者那樣觀測資源的使用情況.用法 weak pt...