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拷贝。
对应的有两次析构函数。
有参构造函数拷贝构造函数
拷贝构造函数
析构函数
析构函数
析构函数