C
Christopher Benson-Manica
Is the following code legal, moral, and advisable?
#include <iostream>
class A {
private:
int a;
public:
A() : a(42) {}
~A() {
std::cout << "A's destructor called, a is " << a << std::endl;
}
};
class B : public A {
private:
int b;
public:
B() : b(666) {}
~B() {
std::cout << "B's destructor called, b is " << b << std::endl;
}
void go() { delete this; }
};
int main() {
B *b=new B();
b->go();
return 0;
}
Specifically, are B and A's destructors still permitted to access
their class' member variables after the this pointer has been deleted?
#include <iostream>
class A {
private:
int a;
public:
A() : a(42) {}
~A() {
std::cout << "A's destructor called, a is " << a << std::endl;
}
};
class B : public A {
private:
int b;
public:
B() : b(666) {}
~B() {
std::cout << "B's destructor called, b is " << b << std::endl;
}
void go() { delete this; }
};
int main() {
B *b=new B();
b->go();
return 0;
}
Specifically, are B and A's destructors still permitted to access
their class' member variables after the this pointer has been deleted?