今天在用线程池的时候发现向任务队列添加任务后还没等到子线程执行任务,线程池对象就析构了,检查了很久才发现我是在一个函数中定义的局部线程池对象,函数执行完,我定义的线程池对象当然自动析构了。没想到我的基础是如此薄弱。我的初衷是想定义一个类,让这个类的对象去使用线程池(添加任务是这个类的一个方法,由于只是测试线程池,我当时直接就在这个方法里实例化了一个线程池对象)。
知道问题后就在这个类的成员属性中添加了一个线程池,只要在构造函数中初始化一下就好了,然而我发现在构造函数中我怎么也实例化不了这个线程池,用赋值语句编译器就提示c2280:尝试引用已删除的函数,直接threadpool()当然也不行,后来百度了才知道,在构造函数中初始化一个成员(用成员的构造函数初始化)可以这么写:
class a{ public: // ThreadPool tp; a(){} ~a(){} a(int id):tp(3){ // } // }
路漫漫其修远兮,我该怎样求索。这种写法我居然现在才知道。
原文:https://www.cnblogs.com/hyh2050/p/14276505.html