bind是否接受非POD参数传递的值或引用?

时间:2016-03-29 14:21:48

标签: c++ boost

我不完全理解boost bind limitations提到的含义。

想象一下,构造了一个类c的实例,其成员函数start()由主线程以外的线程调用。

如果我的理解有误,请纠正我:

DoIt()从参数v得到的是向量的引用(即地址)。 当DoIt()访问变量v时,f()返回后其内容可能已被销毁。因此,代码

io_service.post(boost::bind(&c::DoIt,this,v);

不安全,程序可能崩溃。我应该首先将v中的f()序列化为std :: string并将其作为参数传递给bind(),然后更改DoIt()以将std :: string作为参数。

class c
{
    boost::asio::io_service io_service;
    void DoIt(std::vector<int> v){
        std::cout << v.size() << std::endl;
    }
    void start(){
        io_service.run();
    }
    void f(){
        std::vector<int> v;
        v.push_back(1);
        v.push_back(2);
        io_service.post(boost::bind(&c::DoIt,this,v);
    }
}

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:0)

bind总是按值来获取它的参数。这是std::ref(和boost::ref)确实存在的原因之一。