Здравствуйте!
Решил посмотреть, что будет создано/удалено при передаче функтора в std::thread. Предполагал, что будет создана одна копия исходного объекта, но результат удивил - пять конструкторов и деструкторов. Скажите, что и зачем он создает? И попутный вопрос: можно ли как-то передать ему объект с private деструктором (если объект singleton)?
Компилировалось в VS 2012, далее код и вывод:
#include <iostream>
#include <thread>
class Toster
{
public:
Toster(void)
{
std::cout << "t+ " << std::this_thread::get_id() << std::endl;
}
Toster(Toster&)
{
std::cout << "tC " << std::this_thread::get_id() << std::endl;
}
~Toster(void)
{
std::cout << "t- " << std::this_thread::get_id() << std::endl;
}
void operator()(void)
{
std::cout << "t() " << std::this_thread::get_id() << std::endl;
}
};
int main()
{
Toster test;
std::cout<< "thread start" << std::endl;
std::thread thr(test);
thr.join();
std::cout << "thread stop" << std::endl;
test();
std::cin.get();
return 0;
}
Вывод:
t+ 6092
thread start
tC 6092
tC 6092
tC 6092
tC 6092
tC 3924
t() 3924
t- 6092
t- 3924
t- 6092
t- 6092
t- 6092
thread stop
t() 6092