如何使用抽象类抽象创建std :: thread

问题描述 投票:0回答:1
#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();

}

我获得了以上代码的细分片段。我试图用一个派生类创建一个抽象类。使用该抽象类运行线程是我的要求。今天它是一个派生类,但将来我将扩展其他操作

c++ stdthread
1个回答
0
投票

ptrA只是一个指针,它需要一个指向的对象。由于此指针是在stackautomatic storage class)上创建的,因此它可能持有垃圾值(称为wild pointer),并且当您的程序尝试访问该对象时(由于创建了该对象,该对象不存在)您的指针,您遇到了细分错误。

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

尝试一下:

A *ptrA = new A();

A obj;
std::thread th(&A::intiliaze, &obj, x, y);
th.join();
© www.soinside.com 2019 - 2024. All rights reserved.