Если вы обращаетесь к данным из вашего класса A из потока, вы должны присоединиться к ним в деструкторе.В противном случае отсоединенный поток получит доступ к данным класса после его уничтожения, что является просто неопределенным поведением.
Ваша функция потока должна быть статической или глобальной.Но вы можете передать своему классу этот указатель как параметр arg в pthread_create и static_cast вернуть его в основную функцию вашего потока и вызвать нормальный метод в вашем классе.Так что у вас очень тонкая статическая функция:
class X {
public:
X() {
pthread_create(m_thread, 0, ThreadStart, this);
}
private:
static void *ThreadStart(void *arg) {
static_cast<X *>(arg)->ThreadMain();
return 0;
}
void ThreadMain() {
}
.
.
.
};