Ign*_*ant 6 c++ smart-pointers c++11
我读这篇文章由Herb萨特关于通过智能函数指针.他没有提到std::weak_ptr,老实说,我找不到一个好的方案,传递这样的智能指针是有用的.
该功能是否拥有所有权?通过std::shared_ptr.该函数是否只需要对底层对象进行操作?传递原始指针或引用.
所以传递std::weak_ptr给100%无用的功能?
所以传递
std::weak_ptr给100%无用的功能?
没有.
考虑这个玩具示例.
struct PointerObserver
{
std::weak_ptr<int> held_pointer;
void observe( std::weak_ptr<int> p )
{
held_pointer = std::move(p);
}
void report() const
{
if ( auto sp = held_pointer.lock() )
{
std::cout << "Pointer points to " << *sp << "\n";
}
else
{
std::cout << "Pointer has expired.\n";
}
}
};
Run Code Online (Sandbox Code Playgroud)
在此示例中,函数observe保持状态.
它的weak_ptr参数表明这个传递的指针不是拥有的,但保留了以后拥有的能力,安全地检测指针是否已经过期.
对于以后不保持状态的函数也可以weak_ptr在多线程上下文中有用地接收参数,其中关联数据可能 在函数工作时到期.
| 归档时间: |
|
| 查看次数: |
1622 次 |
| 最近记录: |