c++ - 为什么析构函数被调用两次而构造函数只被调用一次?

标签 c++ class constructor destructor

我的代码是

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/

相关文章:

java - 如何将 JOptionPane.showInputDialog 与我创建的类一起使用?

c++ - 用一个函数打印出最大值和平均值

javascript - 如何通过类名或另一个类名获取元素?

class - 一起使用表单和类的 VBA Excel 最佳实践?

c# - 对象不能从 DBNull 转换为构造函数中的其他类型

c++ - 了解构造函数的一些具体情况

c++ - 在旧的 C++ 编译器上 `* const&` 中的临时引入令人费解

c++ - Linux C++的开放源代码库,可将PDF转换为TXT

c++ - 折叠表达式与任意可调用?

python - Python中重载构造函数的要点?