weak bindのstd実現
4801 ワード
転載は出典を明記してください。http://blog.csdn.net/wangji163163/article/details/73698662
弱いbindが実現して、ファンクラブがメンバーであることを防止する時、bind shared_fromthisは自己参照を形成し、メモリのリークをもたらします。
弱いbindが実現して、ファンクラブがメンバーであることを防止する時、bind shared_fromthisは自己参照を形成し、メモリのリークをもたらします。
#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 _Ret RT;
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バージョンを実現しましたが、bookバージョンはまだ実現されていません。原因はbookのforwardとC+11の意味が違っています。