В чем причина того, что вы не можете переместить объект в другой поток? Бывают ситуации, когда это может быть полезно. Например:Почему невозможно переместить переменную в другой поток
Вы создаете цикл, который принимает входящие соединения сокетов. Было бы неплохо переместить входящие соединения в другой поток, который будет обрабатывать соединение. Вам больше не нужно соединение в цикле принятия. Так почему вы должны создать указатель?
Небольшой тест:
#include <iostream>
#include <thread>
using namespace std;
class Pointertest
{
public:
Pointertest() {cout << "Constructor";}
Pointertest(Pointertest &pointertest) {cout << "Copy";}
Pointertest(Pointertest &&pointertest) {cout << "Move";}
~Pointertest() {cout << "Destruct";}
};
void foo(Pointertest &&pointertest)
{
}
int main()
{
Pointertest pointertest;
foo(std::move(pointertest)); //Works
thread test(foo,std::move(pointertest)); //**cannot convert parameter 1 from 'Pointertest' to 'Pointertest &&'**
}
Практический способ добиться того, что вы хотите, это использовать 'std :: thread test ([] (Pointertest & p) {foo (std :: move (p));}, std :: ref (pointertest)); 'as' std :: ref' - это инструмент политики для запроса ссылочной семантики, в которой используются семантика значения. Не существует политики для «pass in reference, restore as rvalue», поэтому необходимо, чтобы выражение lambda выполняло такое восстановление. –