如果我将它绑定到“this”,std :: bind是否保留对象的引用/副本?

时间:2013-11-26 17:12:43

标签: c++ c++11 stl

我有一个简单的课程。

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 ++上测试过它。

1 个答案:

答案 0 :(得分:0)

std :: bind按值获取参数,因此它保留了this指针的副本(而不是对象)。只要func有效,你就有责任让对象保持活着。