【发布时间】:2018-11-18 14:31:16
【问题描述】:
我学习了三个调用拷贝构造函数的案例
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 or String s),复制参数时调用构造函数
我说的对吗?
【问题讨论】:
-
你能给出你使用的真实代码吗?这不是它。以及哪个编译器带有什么标志。
-
附注:通过引用返回对象时必须小心。如果对象是在堆栈上创建的,则引用将悬空。详情请见https://stackoverflow.com/questions/2497541/c-best-practice-returning-reference-vs-object。
标签: c++ pass-by-reference copy-constructor call-by-value