在 std::unique_ptr

问题描述

我有一个函数 foo(T value),其中 T 是只能移动的。我想(出于某些原因)分配 value 类型的 T调用 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();
  }
}

解决方法

完全没有理由涉及指针:

V0 = repeat(sqrt.(kgrid),outer = [1,7]);
zgrid = sort!(rand(1,7); dims=2)
kgrid = sort!(rand(500,1); dims=1)
P = rand(length(zgrid),length(zgrid))
@btime T_($V0,$P,$kgrid,$zgrid,$β,$δ);
# output:   5.126 ms (4 allocations: 54.91 KiB)

感谢 @rafix07 指出需要添加 void HandleCLient(Socket socket){ //... } //... while (true) { //Construct in-place Spawn([s=Socket(acceptor.Accept)]() mutable { HandleClient(std::move(s)); }).Detach(); }