【发布时间】:2017-05-02 14:31:00
【问题描述】:
是否可以使用指向类构造函数的函数指针来创建线程?
如果可能的话,什么时候调用类析构函数?
我已经做了这个我正在寻找的例子:
class ClassA
{
public:
ClassA(void* argPtr)
{ ... }
};
int main(void)
{
pthread_t thread;
pthread_create(&thread, NULL, &ClassA(), NULL);
return 0;
}
【问题讨论】:
-
不,构造函数不是函数;它的地址不能被取走。
&ClassA()(如果它甚至可以编译)创建一个临时对象并获取它的地址。 -
您可以创建一个线程,该线程调用一个函数,该函数创建一个
ClassA的实例并将调用其构造函数。 -
您可以在构造函数中创建一个线程,然后在您的对象上运行 - 不完全相同;并且最终可能会打开其他罐头蠕虫(该对象尚未构建!)
-
您可能需要查找
<thread>。 Pthreads 用于 C,并且不理解 C++。而在现代 C++ 中,您可以调用std::thread(&std::make_unique<ClassA>).detach()。然后当unique_ptr超出范围时将调用析构函数。
标签: c++ multithreading class constructor pthreads