2017-05-14 142 views
2

我正在編寫Thread_Guard類,如中所述中的併發程序清單2.3 - 使用RAII等待一個線程到完成。Thread_Guard類中std :: thread引用的默認值是什麼

下面是類

class Thread_Guard 
{ 
    thread& gThread; 
public: 
    Thread_Guard() : gThread(NULL) {}; 
    explicit Thread_Guard(thread& t1) : gThread(t1) 
    { 
    } 
    ~Thread_Guard() 
    { 
     if (gThread.joinable()) 
      gThread.join(); 
    } 
    Thread_Guard(const Thread_Guard& gT1) = delete; 
    Thread_Guard& operator=(const Thread_Guard& gT1) = delete; 

}; 

什麼是在默認構造函數引用std::thread初始化值?我會從下面的main這樣稱呼它。其中MyInt是我寫的一個樣本類。

int main() 
{ 
    int a = 100; 
    MyInt customInt(a); 
    thread worker(customInt); 
    Thread_Guard(worker); 
    return 0; 
} 

回答

1

原始版本thread_guard不包含默認構造函數;可能是通過設計。看到用例激發你的問題會很有意思(也許還有其他選擇)。

但是,如果你想做到這一點,你可以簡單地存儲在類對象thread *,使默認的構造函數將其設置爲nullptr,並有析構函數檢查這個第一:

class Thread_Guard 
{ 
    thread *gThread; 
public: 
    Thread_Guard() : gThread(nullptr) {};                                        
    explicit Thread_Guard(thread& t1) : gThread(&t1) 
    { 
    } 
    ~Thread_Guard() 
    { 
     if (gThread && gThread->joinable()) 
      gThread->join(); 
    } 
    Thread_Guard(const Thread_Guard& gT1) = delete; 
    Thread_Guard& operator=(const Thread_Guard& gT1) = delete; 

}; 
+0

謝謝阿米Tavory的答案:),這只是一個疑問,在這種情況下,線程引用的默認值是什麼。 – Mahesh

相關問題