3

私はこのようなコードを持っています:

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 ();
  }
};
4

1 に答える 1