我的代码是

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的原因。

09-27 10:20