Доступ к переменным-членам после вызова деструктора

у меня есть такой код:

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

3

Решение

Ваш местный f относится к объекту за пределами Test а также f будет сохраняться до тех пор, пока test() да, так что да, это будет работать.

2

Другие решения


По вопросам рекламы [email protected]