我有一个简单的课程。
class F{
public:
F(string const & name):name_(name){}
void print(){ cout << name_ << endl;}
std::function<void()> binder(){
return std::bind(&F::print,this);
}
};
现在如果我实例化一个新类,调用binder
,删除该对象,调用binder返回的函数,我仍然可以看到正确的值。像这样的东西
F * f = new F("hello");
function<void()> func = f->binder();
delete f;
func(); // prints hello
bind函数是否保留对象的副本/引用?听起来有愚蠢的风险,它是属于堆栈还是堆?
P.S-我在MacOSx上使用clang ++,但我也在g ++上测试过它。
答案 0 :(得分:0)
std :: bind按值获取参数,因此它保留了this指针的副本(而不是对象)。只要func有效,你就有责任让对象保持活着。