使用一些 "specialized" 字段调用继承的方法

Call inherited method using some "specialized" fields

例如:

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。你能解释为什么吗?如何在不重写析构函数的情况下修改代码才能看到预期的结果?

声明 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){}
}