cpp
class Foo{
public:
int key;
int val;
Foo():key(0),val(0){
cout<<"无参构造函数\n";
}
Foo(int k, int v):key(k),val(v){
cout<<"有参构造函数\n";
}
~Foo(){cout<<"析构函数\n";}
Foo(const Foo& foc){
this->key = foc.key;
this->val = foc.val;
cout<<"拷贝构造函数\n";
}
};
Foo func(Foo foo){
return foo;
}
int main() {
Foo foopus(1,1);
cout<<"\n";
func(foopus);
}
调用func传入foo类型的参数调用几次构造函数,几次析构函数?
答:两次构造,两次析构。
第一次传入函数参数时,会调用拷贝构造函数,构造函数参数里的对象foo。
第二次,函数返回时,会返回一个临时变量,调用拷贝构造函数,从foo拷贝。
对应的有两次析构函数。
bash
有参构造函数
拷贝构造函数
拷贝构造函数
析构函数
析构函数
析构函数