关于拷贝(复制)构造函数为什么不能用值传递
1个回答
展开全部
当你尝试着把拷贝构造函数写成值传递的时候,会发现编译都通不过,错误信息如下:
error: invalid constructor; you probably meant 'S (const S&)' (大致意思是:无效的构造函数,你应该写成。。。)
如果真是产生死循环这个原因的话,应该是这样子的:
#include<iostream
using namespace std;class S{int a;public:
S(int x):a(x){}
S(const S st){this-a=st.a;}//拷贝构造函数};int main(){S s1(2);S s2(s1);return 0;}
当给s2初始化的时候调用了s2的拷贝构造函数,由于是值传递,
系统会给形参st重新申请一段空间,然后调用自身的拷贝构造函数把s1的数据成员的值传给st。当调用自身的拷贝构造函数的时候又因为是值传递,所以。。。
也就是说,只要调用拷贝构造函数,就会重新申请一段空间,只要重新申请一段空间,就会调用拷贝构造函数,这样一直下去就形成了一个死循环。
所以拷贝构造函数一定不能是值传递。作者 c小加
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询