我的代码是
class CTemp{
public:
CTemp(){
printf("\nIn cons");
}
~CTemp(){
printf("\nIn dest");
}
};
void Dowork(CTemp obj)
{
printf("\nDo work");
}
int main()
{
CTemp * obj = new CTemp();
Dowork(*obj);
delete obj;
return 0;
}
我得到的输出是
In cons
Do work
In dest
In dest
现在为什么构造函数被调用一次而析构函数被调用两次?有人可以解释一下吗?
最佳答案
void Dowork(CTemp obj)
在这里完成本地复制,退出
DoWork
函数的作用域后将对其进行销毁,这就是为什么您看到destructor-call的原因。