у меня есть такой код:
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 ();
}
};
Ваш местный f
относится к объекту за пределами Test
а также f
будет сохраняться до тех пор, пока test()
да, так что да, это будет работать.