我已经了解了关于调用复制构造函数的三个案例
1. 一个变量是从同一个类的对象初始化的
2.一个函数被调用一个类的值参数
3. 函数返回的值是类的对象
教科书还说对于上述两种情况(case2 和 3),为了避免调用复制构造函数,请使用 call-by-reference
我已经搜索了一些信息,但我无法完全理解。
例如(我自己编写了代码)
class CpClass{
int p;
CpClass(const CpClass &obj){
cout<<"user-defined constructor"<<endl;
p = obj.p;
}
~CpClass(){
cout<<"destructor"<<endl;
}
};
void show1(String &s)
{ cout << "show1 : " << s.p; }
void show2(String s)
{ cout << "show2 : " << s.p; }
int main(){
CpClass c1(10);
CpClass c2(c1);
show1(c2);
show2(c2);
};
我找到了一些关于这个的信息。
首先,当我们传递一个类对象的参数时,如果参数是引用形式而不是值,则函数一结束就不会调用析构函数。主函数结束时调用析构函数
其次,在复制参数时调用构造函数,无论参数形式是按值调用还是按引用调用(在代码中,String &s 或 String s)
我是对还是错?