Ich habe diese Situation:Welchen Typ für eine virtuelle Funktion hat eine Klasse, wenn ein Member-Destruktor ausgeführt wird?
#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;
}
Ist sichergestellt, dass dieser Druck "abgeleitet"?
Ich denke, es wird entweder 'B :: f 'aufrufen oder undefiniertes Verhalten aufrufen. Die Lebensdauer eines Objekts endet formal [wenn Destruktoren beginnen] (http://en.cppreference.com/w/cpp/language/lifetime), also wenn 'A :: ~ A' 'b-> f() aufruft ; ',' b's abgeleiteter Teil ist bereits tot. – Quentin
werfen Sie auch einen Blick auf [diese] (http://stackoverflow.com/questions/12092933/calling-virtual-function-from-destructor) – sp2danny
@Quentin dieses Zitat sieht überhaupt nicht gut aus. Sie können definitiv auf ein Objekt von seinem eigenen Destruktor zugreifen, was im Widerspruch zu dem Verbot steht, auf das Objekt zuzugreifen, sobald seine Lebensdauer endet. –