002使用类创建一个线程

#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()可以控制。
 *	
 */

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章