2014-11-23 428 views
-1

我想知道.reset()對共享指針有什麼作用。 是否如所提到的here它簡單地由一個遞減一個共享指針的引用計數或它刪除所有引用計數到對象重置的計數爲0.reset對共享指針做了什麼

這是我在這裏的代碼示例

std::vector<boost::shared_ptr<foo>> vec; 
boost::shared_ptr<foo> f(boost::make_shared<foo>()); //ref count 1 
vec.push_back(f); //ref count 1 
vec.push_back(f); //ref count 3 
int a = f.use_count(); //Will return 3 
f.reset();  //Will turn the refernece count to 0 
vec[1].reset(); //Will reduce the reference count by 1. 
a = f.use_count(); 

我我很好奇爲什麼f.reset()將參考計數設置爲0,而vec[1].reset()將參考計數減少1 1

+4

您是否閱讀過任何文檔,或http://en.cppreference.com/w/cpp/memory/shared_ptr/reset? – 2014-11-23 01:12:20

回答

2

它釋放當前參考。其他參考不受影響。

+0

@MistyD調用'f.reset()'後,_of course_'f.use_count()'爲0,它沒有任何引用!但是如果你調用'vec [0] .use_count()',它應該有正確的編號。 – 2014-11-23 01:53:17

+0

感謝您解決這個問題 – MistyD 2014-11-23 02:06:06