如何解决在 std::unique_ptr
我有一个函数 foo(T value)
,其中 T
是只能移动的。我想(出于某些原因)分配 value
类型的 T
并调用 foo
。
我可以这样做吗?
{
std::unique_ptr<T> ptr = make_unique<T>(T());
foo(std::move(*ptr));
}
如果不清楚:我想去掉这段代码中的 new
和 delete
:
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 举报,一经查实,本站将立刻删除。