#include <iostream>
#include <string>
#include <thread>
using namespace std;
class testClass
{
public:
int &m_i;
//構造函數
testClass(int&i) :m_i(i)
{
cout << "類testClass的構造函數被執行" << endl;
}
//拷貝構造函數
testClass(const testClass&ts):m_i(ts.m_i)
{
cout << "拷貝構造函數被執行" << endl;
}
~testClass()
{
cout << "析構函數被執行" << endl;
}
void operator()()//重載()運算符,變成一個可調用對象
{
cout << "我的線程opertator開始執行了\n" << endl;
cout << "m_i1=" << m_i << endl;
cout << "m_i2=" << m_i << endl;
cout << "m_i3=" << m_i << endl;
cout << "m_i4=" << m_i << endl;
cout << "我的線程opertator結束執行了\n" << endl;
}
};
int main(void)
{
//使用類創建線程
int myi = 6;
testClass mytestclass(myi);
thread myThread(mytestclass);//使用類對象創建一個線程
//myThread.join();
myThread.detach();
cout << "這是主線程的執行\n" << endl;
system("pause");
return 0;
}
/*
* 子線程打印輸出主線程的一個int類型的空間,當主線程執行完畢,子線程繼續訪問主線程的
* 內存空間,就會出錯。所以這裏不能使用引用。
* 問題:當主線程執行完畢,那麼主線程中的定義的類對象還能使用嗎?主線程中的對象沒有被銷燬嗎??
* 原因是:對象已經不存在了,但是複製了一個新對象mytestclass到子線程中。主線程中的對象不存在了。
* 但是複製的對象依舊存在。只要類裏面沒有引用,指針等就不會有問題。會調用拷貝構造函數。但是使用detach()
* 構造和析構不能控制,使用join()可以控制。
*
*/