私はこのような状況を持っている:メンバデストラクタの実行時にクラスにはどのような型の仮想関数がありますか?
#include <iostream>
struct B { virtual void f() { std::cout << "base"; } };
struct A {
~A() {
b->f();
}
B *b;
};
struct Bd : B {
Bd():a{this}{ }
~Bd() { }
virtual void f() { std::cout << "derived"; }
A a;
};
int main() {
Bd d;
}
は、このプリントは「由来する」ことを保証しますか?
私は 'B :: f'を呼び出すか、未定義の動作を呼び出すと考えています。オブジェクトのライフタイムは、(デストラクタが始まると)正式に終了するので、 'A ::〜A 'が' b-> f()を呼び出すと、 ; '、' b'の派生部分は既に死んでいます。 – Quentin
また、[this](http://stackoverflow.com/questions/12092933/calling-virtual-function-from-destructor) – sp2danny
@Quentin見てまったく見えません。あなたは間違いなく、それ自身のデストラクタからオブジェクトにアクセスすることができます。これは、その存続期間が終わるとアクセスを禁止することと反対です。 –