tinystl實現(第十九步 cowptr 實現)

2021-10-01 02:53:36 字數 4250 閱讀 1859

經過長時間的學習終於可以開始tinystl的仿(chao)寫工作了,本文參考了這位大神的github,坦白講我只是補充了注釋,因為tinystl的**真的非常經典而我又沒什麼這種大型專案的經驗,所以只能這樣做,不過相信能夠有助於大家的學習

#強烈建議按順序閱讀本專欄

cowptr:原生指標

閱讀這篇文章了解原生指標 泛型指標 智慧型指標

本文實現的原生指標並沒有達到應有的效果,僅僅實現了基本功能

cowptr.h

#pragma once

#ifndef _cowptr_h_

#define _cowptr_h_

#include

"memory.h"

namespace mystl

proxy

(const proxy&)

=default

; proxy&

operator=(

const proxy&)

=default

;const t&

operator*(

)const

; t&

operator*(

);const t *

operator

->()

const

; t *

operator

->()

; cow_ptr

&operator=(

const t& val)

;operatort(

)const

;private

: cow_ptr

*cp_;};

}//未能完全模擬原生指標操作,只供參考,詳情見單元測試

template

<

class

t>

class

cow_ptr

;template

<

classt,

class..

. args>

cow_ptr

make_cow

(args.

..args)

}#include

"detail\cowptr.impl.h"

#endif

cowptr.impl.h

#pragma once

#ifndef _cowptr_impl_h_

#define _cowptr_impl_h_

namespace mystl

template

<

class

t>

//將原生指標轉化為share指標再返回

t& proxy

::operator*(

)template

<

class

t>

const t *proxy

::operator

->()

const

//將原生指標轉化為share指標再返回

template

<

class

t>

t *proxy

::operator

->()

//轉化為share指標再返回

template

<

class

t>

cow_ptr

& proxy

::operator=(

const t& val)

template

<

class

t>

proxy

::operatort(

)const

}//預設構建為空

template

<

class

t>

cow_ptr

::cow_ptr

(t *p =

nullptr):

ptr_

(p)template

<

class

t>

template

<

class

d>

cow_ptr

::cow_ptr

(t *p, d d)

:ptr_

(p, d)

template

<

class

t>

cow_ptr

::cow_ptr

(const cow_ptr& cp)

template

<

class

t>

cow_ptr

& cow_ptr

::operator=(

const cow_ptr& cp)

return

*this;}

template

<

class

t>

typename cow_ptr

::element_type *cow_ptr

::get()

template

<

class

t>

const

typename cow_ptr

::element_type *cow_ptr

::get()

const

template

<

class

t>

cow_ptr

::operator

bool()

const

template

<

class

t>

const

typename cow_ptr

::proxy cow_ptr

::operator*(

)const

template

<

class

t>

typename cow_ptr

::proxy cow_ptr

::operator*(

)template

<

class

t>

const

typename cow_ptr

::proxy cow_ptr

::operator

->()

const

template

<

class

t>

typename cow_ptr

::proxy cow_ptr

::operator

->()

template

<

classt1,

class

t2>

bool

operator==(

const cow_ptr

& cp1,

const cow_ptr

& cp2)

template

<

class

t>

bool

operator==(

const cow_ptr

& cp, nullptr_t p)

template

<

class

t>

bool

operator

==(nullptr_t p,

const cow_ptr

& cp)

template

<

classt1,

class

t2>

bool

operator!=(

const cow_ptr

& cp1,

const cow_ptr

& cp2)

template

<

class

t>

bool

operator!=(

const cow_ptr

& cp, nullptr_t p)

template

<

class

t>

bool

operator

!=(nullptr_t p,

const cow_ptr

& cp)

}#endif

第十九章 事務

redis的事務是指將多個命令請求打包,一次性地,按順序執行的機制。通過multi exec watch等命令實現事務功能。19.1.1 事務的開始 multi命令的執行代表了乙個事務的開始,會將執行該命令的客戶端由非事務狀態切換成事務狀態 在客戶端狀態的flags屬性中開啟redis multi標...

第十九周作業

1 實現永久重定向,當使用者訪問 www.magedu.org 這個網域名稱時我想讓他跳轉到 www.magedu.com 的主頁面,請寫出配置過程 location 2 rewrite案例 判斷檔案是否存在,要求 當使用者訪問到公司 的時輸入了乙個錯誤的 url 可以將使用者重定向至 www.ma...

第十九講 其他類

回顧 1.多型如何實現的?過載和虛方法覆寫 2.什麼情況用虛成員?不確定的用途,留待子類擴充套件覆寫時 3.什麼情況需要覆寫?功能近似,不必要重新建立新方法時 4.為什麼需要抽象類和抽象方法?規劃乙個類,但當前無法或不必具體現實時 主要內容 1.object 類 所有的.net類都派生於system...