# resource ownership/ ownership semantic 所有權 create : 2024/12/04 update : 2024/12/16 類別圖主要考慮類別的設計,所有權主要考慮對資源的生命週期的管理 ## 簡介 所有權語義是c\++的概念,不是c\++標準定義的。但c\++標準有提供一些符合此概念的工具。比如unique_ptr跟shared_ptr。 所有權主要考慮要不要管理他的生命週期 ## 完整說明: 一個資源屬於誰 \= "一個資源的所有權屬於誰" \= 一個資源的所有權屬於某個人/東西/個體(entity) \= 一個個體持有/擁有一個資源 \= 重點 : **該個體負責管理該資源的生命週期** \= 要確保當該資源不再被該所有權人需要時,正確的釋放資源以避免非預期問題的產生。 ## 所有權人/個體 通常是指函數或物件。在多執行緒程式中會說哪個thread(的哪個函數或物件)。 ## 物件 最常見的(資源的所有權人)是物件,擁有它資料成員的所有權。 ### 函數 : [Modern C++ 参数传递:所有权语义](http://www.purecpp.cn/detail?id=2394) 仔細閱讀此文章。這裡提到的規則來自作者對C++ Core Guideline的整理  1. Scoped ownership 作用域所有權 2. Borrowed ownership 借用所有權 : 暫時訪問該資源而不獲取他的所有權,通常透過raw指標跟引用實現。 3. Exclusive ownership 獨佔所有權 : 一個資源在任何時刻只能被一個實體擁有,所有權可轉移。 4. Shared ownership 共享所有權 5. Weak ownership 有空看看 資源的所有者、借用、獨佔者、共享者。 https://chatgpt.com/share/675007d9-8b08-800f-a082-53f90962b986 傳raw指標跟引用的區別在於raw指標很危險,他可能是 1. wild ptr (危險,func無法判斷它是否為wild ptr) 2. dangling ptr (危險,func無法判斷它是否為dangling ptr) 3. nullptr (要在func()內做判斷) ## 關鍵問題 到底誰是該資源的所有權人? \= 到底是誰要負責該資源的生命週期 ## 資源例子 最常見的資源是動態配置的記憶體,如果他的所有權人沒有正確釋放該資源,那可能會導致記憶體洩漏(比如一個物件在建構子(或他的方法中)用raw指標動態配置(new)一塊記憶體,但在該物件被銷毀後卻沒delete掉那塊記憶體)。 又或是一個物件正在使用/存取某個file或某塊共享記憶體(比如某個全域變數),並且lock住(比如用mutex)不讓其他thread去存取,但它用完後卻沒釋放該lock。 常見的"資源": 動態配置的記憶體、多執行緒的lock、網路socket、file等等 from : [The Gist of C++: Objects as Resource Owners | by Dagang Wei | Medium](https://medium.com/@weidagang/the-gist-of-c-objects-are-resource-owners-8ef7e02e4dc1)裡面的的 What Does “Resource Ownership” Mean? 資源:動態配置的記憶體、多執行緒的lock、網路socket、file等等 ## semantic的意思 想想學程式語言時,老師教的syntax跟semantic的意思。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up