削除セマンティクスで予期しない動作が見られました。たとえば、次の C++ コードを使用します。
class Base{
public:
Base(int tmp) : x(tmp) {}
~Base() { std::cout << "Inside Base::~Base()" << std::endl; }
void foo() { std::cout << "Inside Base::foo()" << std::endl; }
int x;
};
...
int main(int argc, char** argv)
{
Base* b = new Base(10);
delete b;
b->foo();
std::cout << "b->x: " << b->x << std::endl;
}
Visual Studio 2008 から次の出力を受け取りました。
Inside Base::~Base()
Inside Base::foo()
b->x: 2359492
を呼び出した後でも、メソッドdelete b
を呼び出すことができるのはなぜですか?Base::foo()
ありがとう、クリス