在析构函数调用后访问成员变量
Access member variables after destructor call
我有这样的代码:
class Foo {
public:
void blub () {}
};
class Test {
public:
Foo& foo;
Test (Foo& f) : foo (f) {}
void test () {
this->~Test ();
foo.blub ();
}
};
显式调用析构函数后,我的Test
class的所有成员变量很可能都无法访问,所以调用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
之外的对象,只要 test()
存在,f
就会持续存在,所以是的,它会起作用。
我有这样的代码:
class Foo {
public:
void blub () {}
};
class Test {
public:
Foo& foo;
Test (Foo& f) : foo (f) {}
void test () {
this->~Test ();
foo.blub ();
}
};
显式调用析构函数后,我的Test
class的所有成员变量很可能都无法访问,所以调用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
之外的对象,只要 test()
存在,f
就会持续存在,所以是的,它会起作用。