私はこのようなコードを持っています:
class Foo {
public:
void blub () {}
};
class Test {
public:
Foo& foo;
Test (Foo& f) : foo (f) {}
void test () {
this->~Test ();
foo.blub ();
}
};
デストラクタへの明示的な呼び出しの後、クラスのすべてのメンバー変数にTest
アクセスできない可能性があるため、呼び出しfoo.blub()
は無効です。メンバー変数へのアクセスを避けるために参照をローカル変数に格納すると、呼び出しはfoo.blub()
確実に機能しますか? コンパイラはローカル変数を最適化し、デストラクタの呼び出し後にメンバー変数にアクセスして、再び無効にすることはできませんか?
class Foo {
public:
void blub () {}
};
class Test {
public:
Foo& foo;
Test (Foo& f) : foo (f) {}
void test () {
Foo& f = foo;
this->~Test ();
f.blub ();
}
};