拷贝构造函数不能采用值传递
1 |
|
当执行步骤1的时候,会调用S2的拷贝构造函数,
由于是值传递,系统会给形参st重新申请一段内存,
然后调用st的拷贝构造函数,把s1赋值给st,
当调用st的拷贝构造函数的时候,又是值传递,又得重复上述步骤,
所以,会一直执行下去,形成一个死循环。
必须把拷贝构造函数改为常类型引用传递,
引用就是别名,不会重新申请内存,同时,我们在赋值运算符函数内不会改变传入的实例的状态,因此应该为传入的引用参数加上const关键字。
1 | S(const S &st){this->a=st.a;}//拷贝构造函数 |