2012-11-29 2 views
3

컴파일러가 main 완료 직후에 future이라는 소멸자를 호출하면 안됩니다. 즉, 어쨌든 f()이 호출되어서는 안됩니까? (gcc 4.7.2에서는 그렇게하지 않습니다).비동기 C++ 11의 미래의 소멸자

#include <iostream> 
#include <thread> 
#include <future> 

using namespace std; 

void f() { 
    cout << "thread...\n"; 
} 

int main() { 
    auto future = async(&f); 
    cout << "I am main\n"; 
} 

편집 : 나는 단지Hello from main를 얻을. 텍스트 thread...은 전혀 인쇄되지 않습니다.

편집 2 : 향후 소집 자의 소멸자가 wait() ??

답변

8

컴파일러는 바로 메인 마감

오른쪽 main 이전이 완료된 후 향후 미래의 소멸자를 호출하지 않아야합니다. 하지만 그렇습니다.

즉, 어쨌든 호출 된 함수 f()가 아니어야합니까?

아니요, 왜요? 왜 당신은 std::future의 소멸자가 그렇게 할 것이라고 생각하게합니까? 이것은 소멸자의 직업이 아닙니다. 사실, §30.6.6/9에 따르면 소멸자의 유일한 기능은 미래의 공유 상태를 해제하고 *this을 파괴하는 것입니다. 아무것도 더.

+0

내 컴퓨터에서'thread ...'가 출력되지 않습니다 (우분투 12.10, gcc 4.7.2). – Cartesius00

+1

@Martin 예. 왜 그것이 인쇄되기를 기대합니까? –

+0

오, 그 뜻은, 함수'f'를 호출 할 필요가 없다는 것입니다. – Cartesius00