2015-06-24 149 views
0

我正在修改我的代碼以包含共享指針而不是原始指針。以下聲明是否有效?共享指針聲明

for(//some loop//){ 

std::shared_ptr<foo> tmp; 
/..do stuff to tmp../ 
vectorofpointer.push_back(tmp); 

此外,一旦tmp超出範圍,這會影響我的向量嗎?

+1

是的,它可以,它保留一個'nullptr',並且被說成「不擁有一個對象」 – WorldSEnder

+0

取決於如何聲明vectorofpoint – Les

+0

如果tmp是有效指針的推入時間,並且如果push_back使用foo *那麼當調用函數超出範圍時,tmp將被釋放/釋放,您將不得不分離tmp以避免自動行爲 – Les

回答

2

是的,沒關係。

參見http://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr

1)默認的構造構造不被管理對象一個shared_ptr,即空shared_ptr

參見http://en.cppreference.com/w/cpp/memory/shared_ptr

一個shared_ptr也擁有無對象,在這種情況下,它被稱爲空[...]

如果您的向量包含shared_ptr元素,那麼在tmp超出範圍之後,您仍然可以訪問指向的對象,因爲引用計數會使對象保持活動狀態。