首页 > 解决方案 > C++函数调用,为什么要使用析构函数?

问题描述

我试图理解 C++ 中更好的函数调用。我有以下代码:

class A{ 
  public:
    A() { cout << "hello\n"; }
    A(const A& obj) { cout << "world\n"; }
    ~A() { cout << "bye\n"; }

  virtual void print() { cout << "a\n"; }
};

A foo(A aobj)
{
    aobj.print();
    return aobj;
}

int main(){
  A a,b,c;
  foo(a);
  system("pause");
  return 0;
}

输出是:

hello //from calling A's default constructor

hello

hello

world //because we pass 'a' by value in funtion foo so the copy constructor is used


a

world //because foo returns by value so the copy constructor is used again

bye //?

bye //?

有人可以解释为什么最后调用了两次析构函数吗?是因为两个复制构造函数调用吗?

感谢您的时间!

标签: c++functiondestructor

解决方案


“再见”被打印 5 次,因为~A()也被称为 5 次。对于对象a, bc析构函数称为 one。然后,当您按值传递a时,会创建一个副本foo,然后将其销毁。最后, foo 的返回类型是一个实例,A当执行移到下一行时,该实例被销毁。因此,总共~A()将被调用 5 次。

在对象的生命周期结束时调用析构函数以释放对象使用的内存。


推荐阅读