Shooting's Blog

C++11 pointer

Pointer types

  • UNIQUE_PTR

    • 確保一份資源(被配置出來的記憶體空間)只會被一個 unique_ptr 物件管理的 smart pointer;當 unique_ptr 物件消失時,就會自動釋放資源。
  • SHARED_PTR

    • 可以有多個 shared_ptr 共用一份資源的 smart pointer,內部會記錄這份資源被使用的次數(reference counter),只要還有 shared_ptr 物件的存在、資源就不會釋放;只有當所有使用這份資源的 shared_ptr 物件都消失的時候,資源才會被自動釋放。
  • WEAK_PTR

    • 搭配 shared_ptr 使用的 smart pointer,和 shared_ptr 的不同點在於 weak_ptr 不會影響資源被使用的次數,也就是說的 weak_ptr 存在與否不代表資源會不會被釋放掉。
    • 由於 weak_ptr 本身不能用來做資料的存取,所以如果要使用的話,實際上是需要先將 weak_ptr 轉換回 shared_ptr 的。轉換的方法也很簡單,就是使用 weak_ptr 提供的 lock() 這個函式,來產生一個有擁有權的 shared_ptr。

Difference in make_shared and normal shared_ptr in C++

  • The difference is that std::make_shared performs one heap-allocation, whereas calling the std::shared_ptr constructor performs two.

  • std::shared_ptr manages two entities:

    • the control block (stores meta data such as ref-counts, type-erased deleter, etc)
    • the object being managed
  • std::make_shared performs a single heap-allocation accounting for the space necessary for both the control block and the data.

Java's pointer concept

  • 只要還有strong reference指著,就不會被gc
  • 被weak reference指著的object,還是有可能被gc,就是有權去回收weak reference指向的object,使用weak reference的user要能handle。

Reference

Avoid memory leak
https://kheresy.wordpress.com/2012/03/03/c11_smartpointer_p1/
https://kheresy.wordpress.com/2012/03/05/c11_smartpointer_p2/

C++11 smart pointer series
https://www.jianshu.com/p/e4919f1c3a28

Difference in make_shared and normal shared_ptr in C++
https://stackoverflow.com/questions/20895648/difference-in-make-shared-and-normal-shared-ptr-in-c
https://blog.csdn.net/love_hot_girl/article/details/21161507

How to create shared_ptr
https://docs.microsoft.com/zh-tw/cpp/cpp/how-to-create-and-use-shared-ptr-instances?view=vs-2017