0
我正在修改我的代碼以包含共享指針而不是原始指針。以下聲明是否有效?共享指針聲明
for(//some loop//){
std::shared_ptr<foo> tmp;
/..do stuff to tmp../
vectorofpointer.push_back(tmp);
此外,一旦tmp超出範圍,這會影響我的向量嗎?
我正在修改我的代碼以包含共享指針而不是原始指針。以下聲明是否有效?共享指針聲明
for(//some loop//){
std::shared_ptr<foo> tmp;
/..do stuff to tmp../
vectorofpointer.push_back(tmp);
此外,一旦tmp超出範圍,這會影響我的向量嗎?
是的,沒關係。
參見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
超出範圍之後,您仍然可以訪問指向的對象,因爲引用計數會使對象保持活動狀態。
是的,它可以,它保留一個'nullptr',並且被說成「不擁有一個對象」 – WorldSEnder
取決於如何聲明vectorofpoint – Les
如果tmp是有效指針的推入時間,並且如果push_back使用foo *那麼當調用函數超出範圍時,tmp將被釋放/釋放,您將不得不分離tmp以避免自動行爲 – Les