关于std::bind绑定栈变量对象的思考
来源:互联网 发布:联通网络整合营销包括 编辑:程序博客网 时间:2024/06/05 15:24
我一直以为std::bind函数在给某个函数绑定参数时,如果参数是栈变量,且是类对象,等实际调用std::bind函数时,因为传递的栈变量参数已经不存在了,会导致程序崩溃,但实际上并不是这样,看代码:
#include <functional>#include <iostream>class A{public: A() { k = 11; std::cout << "A constructor" << std::endl; } A(const A& rhs) { std::cout << "A copy constructor" << std::endl; k = rhs.k; } ~A() { std::cout << "A destructor" << std::endl; }public: int k;};void f1(int i, int j, A a){ std::cout << "k=" << a.k << ", i=" << i << ", j=" << j << std::endl;}int main(){ A* pa = new A(); auto fx = std::bind(f1, 9, 10, *pa); delete pa; fx(); return 0;}
上述代码中pa在绑定函数后立刻被销毁,但是实际调用fx时,并没有发生崩溃,输出结果一切正常。
这说明A对象发生了拷贝。所以,std::bind可以放心大胆地绑定栈变量。
关于std::bind的原理参见: http://www.cnblogs.com/xusd-null/p/3698969.html
阅读全文
0 0
- 关于std::bind绑定栈变量对象的思考
- 关于std::function和std::bind绑定成员函数
- C++ std::bind思考
- std::bind绑定器、std::function、extern C的使用
- std::bind的使用
- std::bind()的使用
- 函数对象,lamdda表达式,function函数包装,std::bind函数绑定
- 使用std::bind绑定成员函数
- C++11 std::function和std::bind绑定器
- 什么是bind variable(绑定变量)?
- oracle 绑定变量(bind variable)
- 绑定变量和BIND PEEKING
- NS2变量绑定之bind()
- NS2变量绑定之bind()
- ORACLE绑定变量BIND PEEKING
- bind peeking--绑定变量窥视
- 关于final 变量的思考
- 关于const变量的思考
- 哈希表入门--详解
- live555 源码分析:MediaSever
- ubuntu安装显卡驱动+cuda+cudnn+vsftp
- 静态内部类单例缓存地区
- HTML表单数据传输
- 关于std::bind绑定栈变量对象的思考
- 关于 ioctl 详细信息
- 使用 poi 根据 word 模板生成 word 文件
- Angular4.x 引入第三方 JS
- 适用于STL泛型的归并(合并排序)排序算法设计
- mysql的merge存储引擎应用
- Glide 4.0源码分析(1)
- 排序算法---直接插入排序
- 构造排序二叉树,并按行从左到右输出