绑定是否接受非POD参数中传递的的值或引用

Does bind take value or reference of passed in non POD argument?

本文关键字:引用 参数 是否 POD 绑定      更新时间:2023-10-16

我不完全理解boost绑定限制所提到的含义。

假设构造了类c的实例,并且它的成员函数start()由主线程以外的线程调用。

如果我的以下理解是错误的,请纠正我:

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

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

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

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);
    }
}

致问候,

bind总是按值接受其参数。这就是为什么std::ref(和boost::ref)确实存在的原因之一。