0
다음 두 함수가 있습니다. 첫 번째 함수는 충돌하지만 두 번째 함수는 정상적으로 실행됩니다. 처음에는 run()이 반환 될 때 객체가 파괴되지만 스레드는 여전히 work() 함수를 실행 중이므로 정의되지 않은 동작이 발생할 수 있음을 이해합니다.부스트 스레드에서 클래스의 멤버 함수를 호출하십시오.
하지만 두 번째 이유는 무엇입니까? 우리가 shared_ptr에 객체를 래핑하면 쓰레드보다 오래 남아있을 것인가?
저를 계몽하십시오. 감사.
void run() {
Object object();
boost::thread t(&Object::work, &object);
}
void run() {
std::shared_ptr<Object> object_(new Object());
boost::thread t(&Object::work, object);
}
여기서 바인드 표현식은 무엇입니까? t (& Object :: work, & object)는 암묵적으로 bind를 호출하고 있는가? – jiawen
@ jiawen 예. 미안, 그건 분명했을거야. 실제로, boost :: bind를 사용할 필요는 없지만,'std :: thread' 구조체'std :: bind'는 같은 방법으로 지정됩니다. 이것은 또한 참조를 묶고 싶다면'boost :: ref (object)'(또는'std :: ref (object)')가 필요하다는 것을 의미한다. – sehe