C++_shared_ptr とは

ただのコピペ。スマートポインタの一種。メモ程度。しっかり理解はしていない。
cv::Ptr<T> が知りたかった。cv::Ptr<T> は shared_ptr と同様のもの。

 

あるメモリの所有権を持つ unique_ptr<T> がただ一つ
限られていたのに対し、shared_ptr<T> は同一のメモリの所有権を
複数で共有できるようにしたスマートポインタ
複数のポインタから同一のメモリを安全に利用し、破棄できるようになる。

 

仕組み

shared_ptr<T> は、所有権を持つポインタの数を記録するカウンタを持っている。
所有権を持つ shared_ptr<T> がコピーされると、内部でカウンタ
インクリメントされ、ディストラクタや明示的解放時にデクリメントされる。
全ての所有者がいなくなるとカウンタがゼロとなり、メモリが開放される。

カウンタで所有者数を管理することで、
複数の shared_ptr<T> が所有権を保持していても、
適切なタイミングで一度だけメモリ解放が実行される。

 

特徴

あるメモリの所有権を、複数shared_ptr<T> で 共有することができる。
   メモリの開放は、全ての所有権を持つ shared_ptr<T> が破棄された際に実行される。
コピーもムーブも可能。
内部でカウンタを利用している関係上、
   やや通常のポインタよりメモリ確保やコピー等の処理が遅い。
配列を扱うことができる。ただし、明示的deleterを指定する必要がある。

 

 

 

こちらから。
https://qiita.com/hmito/items/db3b14917120b285112f
http://opencv.jp/opencv-2svn/cpp/basic_structures.html#ptr

以上。