在這個例子中,我從書了「C++標準庫超越 - 介紹如何增強」:的shared_ptr和引用計數器
boost::shared_ptr<A> createA()
{
boost::shared_ptr<A> p(new B()); // B is a class
return p;
}
int main()
{
typedef std::vector<boost::shared_ptr<A> > container_type;
container.push_back(createA()); /* before returning p does the reference count reach 2 ? */
assert(container[0].use_count() == 1); // true
}
我想知道里面的「P」的引用計數器可以達到當我們創建共享指針「p」時,最大值爲2:1,在返回(複製)它的值之後摧毀「p」之前爲2 ...
我的問題的目標是要知道哪個選項更好,一個返回shared_ptr的函數:返回一個shared_ptr對象或一個對動態創建的shared_ptr的引用。測試此之後:
boost::shared_ptr<A>& createA()
{
boost::shared_ptr<A> &p = *(new boost::shared_ptr<A>(new B));
assert(p.use_count() == 1);
return p;
}
/* ... */
boost::shared_ptr<A> & tmp_ref = createA();
assert(tmp_ref.use_count() == 1);
container.push_back(tmp_ref);
assert(container[0].use_count() == 2);
我可以說,在返回的目的是優選的,因爲在其他情況下,引用計數是2,這就是邏輯(1,因爲我們創建的shared_ptr dynamiccaly和2,因爲該載體具有複製它) 。
複製elision使其很難預測。它可能會或可能不會。 –