C++隐藏this指针使用疑问:链式调用add方法未修改原对象a的值
问题原因
你的add方法当前返回的是Something值类型,执行return *this时会调用拷贝构造函数生成一个全新的临时对象,而非原对象本身:
- 第一次调用
a.add(5):修改原对象a的m_value为5,返回一个和a当前状态一致的临时对象 - 第二次调用
.add(5):是在刚才生成的临时对象上执行修改,临时对象的m_value变为10,和原对象a没有关联 - 最终临时对象赋值给
b,所以b的值是10,a仅被修改过一次,值为5
修改方案
只需要把add方法的返回值改为Something&(左值引用)即可,这样返回的就是原对象本身的引用,不会生成额外拷贝:
// 修改后的add方法 Something& add(int value) { m_value += value; return *this; }
修改后执行a.add(5).add(5)的流程为:
- 第一次
a.add(5)修改a的m_value为5,返回a的引用 - 第二次
.add(5)直接在a本身执行修改,a的m_value变为10 - 最终
a的值为10,b是a的拷贝,值也为10
内容的提问来源于stack exchange,提问作者korzck
相关产品推荐
相关产品推荐

