Вызывающий вектор потоков из деструктора - PullRequest
2 голосов
/ 01 декабря 2019

Почему я не могу вызвать свой вектор потоков из деструктора? Есть ли какое-то правило для использования деструкторов?

void p ()
{
    std::cout << "thread running " << std::endl;
}

class VecThreads // Error: In instantiation of member function 'std::__1::vector<std::__1::thread, std::__1::allocator<std::__1::thread> >::vector' requested here
{
public:
    std::vector<std::thread> threads;

    VecThreads() {
        threads.push_back(std::thread(p));
    }
    ~VecThreads()
    {
        threads[0].join();
    }
};

int main(int argc, const char * argv[]) {
    VecThreads h = VecThreads();
    //h.threads[0].join();  // delete deconstructor and use this works fine
  return 0;
}

Полученная ошибка:

Вызов частного конструктора класса 'std :: __ 1 :: thread'

...