Да, это работает. Вот «настоящая» версия, которая на самом деле печатает «Foo bar»:
#include <boost/make_shared.hpp>
#include <boost/thread.hpp>
#include <boost/bind.hpp>
using namespace boost;
struct FooBar {
void a();
void b();
shared_ptr<thread> m_thread;
std::string m_test;
};
void FooBar::a() {
m_test = "Foo bar";
m_thread = make_shared<thread>(bind(&FooBar::b, this));
}
void FooBar::b() {
std::cout << m_test;
}
int main() {
FooBar fb;
fb.a();
fb.m_thread->join();
return 0;
}
Код cout << test
не дает никакого вывода, потому что m_test
равно ""
Я подозреваю, что это потому, что объект был уничтожен до того, как поток приступил к оценке переменной-члена. Обратите внимание на join()
, это очень важно.