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