如何创建一个 std::thread using abstract class 一个摘要

How to create a std::thread using abstract class an abstract

#include <thread>
#include <utility>
#include <iostream>

class A {
    public :
    virtual void intiliaze(int x,int y) = 0;
};

class B : public A {
    public :
    virtual void intiliaze(int x, int y) {while(true){ std::cout << "Hello World "<< x <<" "<<y<<std::endl;} }
};


int main(int argc, char* argv[]) {
 A* ptrA;
 int x=1;
 int y=2;
 std::thread th(&A::intiliaze,ptrA,x,y);
 th.join();

}

我用上面的代码得到了一个分段错误。我正在尝试用一个派生 class 创建一个抽象 class。使用那个抽象 class 到 运行 线程是我的要求。今天是一个派生class 但以后我会扩展到其他操作

ptrA 只是一个指针,它需要一个对象来指向。因为,这个指针是在 stack (automatic storage class), it might be holding garbage value (called wild pointer) 上创建的,当你的程序试图使用你的指针访问对象(它不存在,因为你已经创建了它)时,你会遇到分段错误。

您可以动态(使用 new)或静态创建该对象。

试试这个:

A *ptrA = new A();

A obj;
std::thread th(&A::intiliaze, &obj, x, y);
th.join();