我的代码是
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
函数的范围后将被破坏,这就是为什么您会看到析构函数调用。
关于c++ - 为什么析构函数被调用两次而构造函数只被调用一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20216971/