如何创建一个 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();
#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();