如何使用抽象类创建std::线程


#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();
}

我用上面的代码得到了一个分段发音。我正试图用一个派生类创建一个抽象类。使用那个抽象类来运行线程是我的要求。今天它是一个派生类,但在未来我将扩展到其他操作

ptrA只是一个指针,它需要一个对象来指向。由于该指针是在stack(自动存储类(上创建的,它可能包含垃圾值(称为野生指针(,当程序试图使用指针访问对象(因为您创建了它而不存在(时,会出现分段错误。

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

试试这个:

A *ptrA = new A();

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

最新更新