【weak bind的std实现】转载请注明出处:http://blog.csdn.net/wangji163163/article/details/73698662
弱bind实现,防止function是成员的时候,bind shared_from_this 形成自引用,导致内存泄露。
#include
#include
#include
namespace stdx = std;
template
class Weak_Binder0
{
typedef stdx::weak_ptr<_Class>WP;
typedef stdx::shared_ptr<_Class>SP;
typedef stdx::functionFN;
public:
Weak_Binder0(const WP& wp, const FN& f) :wp_(wp), f_(f) {}
void operator()(_Args&&... args) const { if (SP sp = wp_.lock())f_(sp.get(), stdx::forward<_Args>(args)...);
}
private:
WP wp_;
FN f_;
};
template
class Weak_Binder
{
typedef _RetRT;
typedef stdx::weak_ptr<_Class>WP;
typedef stdx::shared_ptr<_Class>SP;
typedef stdx::function
输出
$./test_sig
[1000]print0
[1000]print1:100
r=100
r=-1
实现了std版本,boost版本还未实现,原因是boost的forward与C++11的寓意不一样。
推荐阅读