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::coutbind
总是按值获取它的参数。这是std::ref
(和boost::ref
)确实存在的原因之一。bind
总是按值获取它的参数。这是std::ref
(和boost::ref
)的原因之一确实存在。这是否意味着前面提到的示例代码是安全的?以这种方式编码void DoIt(const std::vector&v){}
有意义吗?@MasaoLiu,前提是this
的寿命足够长,它是安全的。这是否意味着前面提到的示例代码是安全的?以这种方式编码void DoIt有意义吗(const std::vector&v){}
?@MasaoLiu,前提是该
寿命足够长且安全。