微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 std::unique_ptr

如何解决在 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(); }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。