#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
(automatic storage class)上创建的,因此它可能持有垃圾值(称为wild pointer),并且当您的程序尝试访问该对象时(由于创建了该对象,该对象不存在)您的指针,您遇到了细分错误。
您可以动态(使用new
)或静态创建该对象。
尝试一下:
A *ptrA = new A();
或
A obj;
std::thread th(&A::intiliaze, &obj, x, y);
th.join();