绑定是否接受非POD参数中传递的的值或引用
Does bind take value or reference of passed in non POD argument?
我不完全理解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
)确实存在的原因之一。
相关文章:
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 具有常量引用参数的函数模板专用化
- C++:常量引用参数
- 字符串引用参数的效率C++
- 通过非常量引用参数修改常量引用参数
- 如何将指针变量作为引用参数传递?
- C++初始化 std::function 时如何将占位符绑定到引用/引用参数?
- 移动类的成员作为常量引用参数传递
- C++带有适用于左值和右值的引用参数的函数
- constexpr 函数的常量引用参数:gcc/msvc vs clang/icc
- 如何使用类型特征将函数的通用引用参数限制为 r 值引用?
- 委托构造函数和引用参数
- 对 const 引用参数使用默认值会导致崩溃
- 为什么我们不允许将纯引用参数传递给 std::thread,但允许传递原始指针?
- 为什么我需要将默认引用参数定义为 const 以便为其分配一个左值?
- 将非左值作为常量引用参数传递.临时是在本地作用域还是在调用方作用域中创建的?
- 如何强制函数仅接受左值引用参数
- 模板引用参数推断失败C++
- 非类型引用参数可以在运行时修改,这是否意味着模板可以在运行时实例化?
- 将unique_ptr作为引用参数或常量传递unique_ptr引用