【发布时间】:2021-07-03 08:07:18
【问题描述】:
我有一个包含两个这样的类的代码:
A类:
class A {
int a, b;
public:
A(int x, int y) {
a = x;
b = y;
}
~A() {
cout << "Exit from A\n";
}
void values() {
cout << a << "\n" << b << endl;
}
};
B类:
class B :public A
{
int c;
public:
B(int x, int y, int z) :A(x, y)
{
c = z;
}
~B() {
cout << "Exit from B\n";
}
void values() {
A::values();
cout << c << endl;
}
};
主要功能:
int main()
{
A testA(1, 2);
testA.values();
B testB(10, 20, 30);
testB.values();
}
这就是我得到的:
1
2
10
20
30
Exit from B
Exit from A
Exit from A
首先从 B 类调用析构函数,然后从 A 调用两次。为什么要两次?不知道怎么改。
【问题讨论】:
-
你有两个对象,所以当然析构函数被调用了两次。每个对象一次。
-
@Devolus 但我有 1 个来自 A 类的对象,所以为什么这个类有两个析构函数
-
“我不知道如何改变它。” - 我不知道你为什么想要。你有两个对象,它们都是 A 的根(一个直接,一个通过继承),所以 A 将为每个销毁打印一次。
-
B是一个A,所以当你销毁一个B时,你也在销毁一个A。这就是继承的工作原理 -
每个
Bis-aA。如果你不想要这种行为,不要让B继承自A,因为这有点继承的意义
标签: c++ class destructor