[技術] Boost C++ Libraries的shared_ptr

Written on 12:18 上午 by Yu Lai

Ref: http://msnlite.org/thread-365-1-1.html

C++是使用pointer來靈活方便地控制memory與instance的,這是它強大的原因之一,
但它缺乏像Java一樣的Garbage Collector機制來回收instance,
因此Programmer必須要自己手動delete掉new出來的instance。

這在軟體規模小的時候還好,但在規模大、多人協同工作、多線程環境加入時,
往往memory與instance的分配和釋放變的越來越難控制。

因此Boost C++ Libraries提供了shared_ptr,
shared_ptr實際上是一個Template Class,
透過instance成不同Class,為Class提供Pointer操作。

例如:

shared_ptr<int> p1(new int);
shared_ptr<int> p2=p1;

這樣p1和p2都可以point到int。
shared_ptr Class內有2個variable,一個是原始pointer,
可以用get()取得,用reset(T* p)可以重新設置。
另一個是instance的引用次數,其值可以用use_count()獲得。
它會隨著引用的shared_ptr來增加,當shared_ptr銷毀時,
引用次數也會減少,當減少到0時,shared_ptr會呼叫delete function來delete instance。

使用方法:
shared_ptr<Object> p1(new Object);        //Use constructor
shared_ptr<Object> p2=p1;        //assign
shared_ptr<Object> p3.reset(p1);        //reset function

p1.reset();        //放棄引用

另外shared_ptr也可以配合malloc()來使用,但這樣point到的空間沒辦法被正常釋放掉,
必須額外定義delete function才行,malloc()的delete function即為free()。
所以使用如下:
shared_ptr p(malloc(100),free);

最後,我想坦白說句我心理的話: "C++搞成這樣,實在只是讓人覺得更難用而已。= ="

If you enjoyed this post Subscribe to our feed

No Comment

張貼留言