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
的构造函数也未被调用。
对于一个对象,它的析构函数在超出范围时被调用。这是我的程序:
#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
的构造函数也未被调用。