【发布时间】:2021-09-10 10:55:30
【问题描述】:
代码
#include<iostream>
struct A
{
~A()
{
std::cout<<"dctorA\n";
}
};
struct B: public A
{
~B()
{
std::cout<<"dctorB\n";
}
};
int main()
{
B b1;
b1.~A();
}
输出
dctorA
dctorB
dctorA
如果析构函数没有继承,那么我如何通过 B 的对象调用它?
我知道规则三和五,但编译器工作时不管是否遵循规则。所以为了避免复杂性,我避免编写复制构造函数和重载 = 运算符。
【问题讨论】:
-
你从哪里得到的信息,那些不是继承的?
-
嗯,这并不完全正确,实际上大部分是错误的。 Here's a list of good books,我建议你投资其中之一。
-
顺便说一句,你几乎不应该像
b1.~A()那样明确地使用析构函数。尤其不是父类的析构函数。 -
C++ Primer Plus 不要与 C++ Primer 混淆。作者是不同的,前者被认为不太受欢迎,以至于《好书清单》指出了这一点。
-
@AbhishekMane -- 删除
b1.~A();,因为这是完全错误和不必要的。现在你遇到了什么问题?
标签: c++ inheritance destructor