C++析构函数如何区分这些差异?

How can C++ destructor distinguish these difference?

对于一个对象,它的析构函数在超出范围时被调用。这是我的程序:

#include <iostream>
using namespace std;

class A {
 public:
  A() {}
  ~A() { cout << "A's destructor called!" << endl; }
};

class B {
 public:
  B() = delete;
  B(int x_) {}
  ~B() { cout << "B's destructor called!" << endl; }
};

void func_a() { A a(); }

void func_b() { B b(1); }

int main() {
  cout << "A" << endl;
  func_a();
  cout << "B" << endl;
  func_b();
  cout << "bye" << endl;
  return 0;
}

我以为会调用 A 或 B 的析构函数。但事实只是B的析构函数被调用了。我很困惑。这是因为class的存储方式吗? 输出:

A
B
B's destructor called!
bye

改变这个

void func_a() { A a(); }

至此

void func_a() { A a; }

在您的代码中 a 是函数声明,而不是对象。

也在构造函数中放置一个cout <<语句。您会看到 A 的构造函数也未被调用。