У меня есть несколько вопросов по поводу этого кода:
#include <thread>
#include <unistd.h>
#include <iostream>
class A
{
public:
~A()
{
std::cout << "Destructor A: " << this << std::endl;
}
void operator()()
{
std::cout << "going to sleep 10 seconds.." << std::endl;
sleep(10);
std::cout << "wake" << std::endl;
}
};
int main()
{
std::cout << "begin" << std::endl;
A* a = new A();
std::thread th(*a);
th.join();
std::cout << "end" << std::endl;
delete a;
return 0;
}
Вывод:
g++ -std=c++17 test.cpp -pthread
./a.out
begin
Destructor A: 0x7fff0b6bed27
going to sleep 10 seconds..
wake
Destructor A: 0x559d4e8012a8
end
Destructor A: 0x559d4e801280
- Почему сразу после вызова std :: thread th (* a) я на самом делеполучил вызов деструктора? это не имеет смысла.
- Почему в один и тот же деструктор поступили 3 вызова из разных случаев? В моем коде я создал 1 экземпляр A и удаляю его в конце основной функции. таким образом, это должен быть всего 1 отпечаток Destrutor A.
- при вызове std :: thread th (* a), конструктор std :: thread использует 'a' в качестве ссылки или создает новый экземпляроб этом (вызывая конструктор копирования A)?
Спасибо.