例如:
struct A {
~A() {
cout << me << ": destructor" << endl;
}
const string me = "A";
};
struct B : A {
const string me = "B";
};
int main() {
{
A a;
B b;
}
cout << "----\n";
return 0;
}
抱歉新手问题,我只是想知道以下输出:
A: destructor
A: destructor
----
在第二行我期待B: destructor
。你能解释一下原因吗?如何在不重写析构函数的情况下修改代码以查看预期结果?
答案 0 :(得分:2)
声明B :: me阴影A :: me,但A ::〜A,显然,使用A :: me。 (你应该阅读更多关于ctors和dtors的信息,特别是为什么不应该在ctors和dtors中调用虚函数以便更深入地理解)。至于如何纠正示例:
struct A{
string me;
A(string str = "A") : me(str){}
~A(){cout<<me<<endl;}
}
struct B : A {
B(string str = "B") : A(str){}
}