复制构造函数和赋值运算符根本的不同
2016-07-18 15:18
260 查看
出处:http://www.cnblogs.com/gnuhpc/
首先要说明的是,若用户没有定义,C++隐式声明一个复制构造函数和一个赋值运算符(完成按数据成员复制的动作)。二者很像,但是在下边这点上有很大的不同:复制构造函数是只在对象实例化时才会被调用,也就是说,在复制构造函数调用期间,这个对象处于一个未决状态(直到复制构造函数被成功调用),另外复制构造函数不返回任何值,void都没有。而赋值运算符则在一个现存的对象被赋予新的值时被调用,并且它有返回值。
在下边这个例子中我们能看到并不是出现“=”就是调用赋值构造函数:
我们看到实例化test对象时调用了默认构造函数,test1使用了复制构造函数(因为这是一个新的对象产生),test2时也是用了复制构造函数,而test2=test1则使用了赋值构造函数(没有新的对象产生),test2=test3则使用了复制构造函数,原因同上。
首先要说明的是,若用户没有定义,C++隐式声明一个复制构造函数和一个赋值运算符(完成按数据成员复制的动作)。二者很像,但是在下边这点上有很大的不同:复制构造函数是只在对象实例化时才会被调用,也就是说,在复制构造函数调用期间,这个对象处于一个未决状态(直到复制构造函数被成功调用),另外复制构造函数不返回任何值,void都没有。而赋值运算符则在一个现存的对象被赋予新的值时被调用,并且它有返回值。
在下边这个例子中我们能看到并不是出现“=”就是调用赋值构造函数:
#include using namespace std; class Test { public: Test(); Test(const Test & r); Test & operator= (const Test& r); private: static int ctor_count; //only a declaration }; Test::Test() { ctor_count++; cout<<"ctor "<
我们看到实例化test对象时调用了默认构造函数,test1使用了复制构造函数(因为这是一个新的对象产生),test2时也是用了复制构造函数,而test2=test1则使用了赋值构造函数(没有新的对象产生),test2=test3则使用了复制构造函数,原因同上。
相关文章推荐
- 通过浏览器的URL获取参数
- springMvc <form action="">提交跳转路径问题
- Ubuntu 12/14 个性化配置
- turtlebot2不能与kobuki连接
- Design Support Library介绍
- Android 讯飞语音合成
- android手机字体库相关问题深入剖析
- 导出导出redis里面的key值
- 史上最通俗易懂的Android中使用Dagger入门教程
- select中的onserverchange事件
- 路由器和交换器的区别
- 使用四种框架分别实现1百万websocket常连接的服务器
- 面试题40:数组中只出现一次的数字
- 友盟新浪微博分享成功后出现白屏界面
- golang的 Web 开发,提示找不到模板文件
- 【C语言入门教程】4.5 指针变量的定义与引用
- VS Code - Debugger for Chrome调试JavaScript的两种方式
- ecstore与淘宝sdk的autoload加载顺序问题
- 贷款回收公司的剥除行动
- Oracle正则表达式