移动 std::unique_ptr 下的值

Move value under std::unique_ptr

我有一个函数 foo(T value),其中 T 是只移动的。我想(出于某些原因)分配 T 类型的 value 并调用 foo.

我可以这样做吗?

{
  std::unique_ptr<T> ptr = make_unique<T>(T());
  foo(std::move(*ptr));
}

如果不清楚:我想去掉这段代码中的newdelete

void ServeForever(uint16_t port) {
  Acceptor acceptor;
  acceptor.BindTo(port).ExpectOk();
  acceptor.Listen().ExpectOk();
  while (true) {
    Socket* socket = new Socket(acceptor.Accept());
    Spawn([socket]() {
      HandleClient(std::move(*socket));
      delete socket;
    }).Detach();
  }
}

根本没有理由涉及指针:

void HandleCLient(Socket socket){
    //...
}

//...

while (true) {
    //Construct in-place
    Spawn([s=Socket(acceptor.Accept)]() mutable
    {
      HandleClient(std::move(s));
    }).Detach();
}

感谢@rafix07 指出需要添加 mutable