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

C++ bind是否接受传入非POD参数的值或引用?,c++,boost,C++,Boost,我不完全理解你提到的意思 假设类c的一个实例被构造,其成员函数start()由主线程以外的线程调用 如果我以下理解有误,请纠正我: DoIt()从其参数v获得的是向量的引用(即地址)。 当DoIt()。因此,守则 io_service.post(boost::bind(&c::DoIt,this,v); 是不安全的,程序可能会崩溃。我应该首先将f()中的v序列化为std::string,并将其作为参数传递给bind(),然后更改DoIt()以std::string作为参数 class

我不完全理解你提到的意思

假设类
c
的一个实例被构造,其成员函数
start()
由主线程以外的线程调用

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

DoIt()
从其参数
v
获得的是向量的引用(即地址)。 当
DoIt()。因此,守则

io_service.post(boost::bind(&c::DoIt,this,v);
是不安全的,程序可能会崩溃。我应该首先将
f()
中的
v
序列化为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);
    }
}
c类
{
boost::asio::io_服务io_服务;
void DoIt(标准::向量v){

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

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

这是否意味着前面提到的示例代码是安全的?以这种方式编码
void DoIt(const std::vector&v){}
有意义吗?@MasaoLiu,前提是
this
的寿命足够长,它是安全的。这是否意味着前面提到的示例代码是安全的?以这种方式编码
void DoIt有意义吗(const std::vector&v){}
?@MasaoLiu,前提是
寿命足够长且安全。