移动 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));
}
如果不清楚:我想去掉这段代码中的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();
}
}
根本没有理由涉及指针:
void HandleCLient(Socket socket){
//...
}
//...
while (true) {
//Construct in-place
Spawn([s=Socket(acceptor.Accept)]() mutable
{
HandleClient(std::move(s));
}).Detach();
}
感谢@rafix07 指出需要添加 mutable
。
我有一个函数 foo(T value)
,其中 T
是只移动的。我想(出于某些原因)分配 T
类型的 value
并调用 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();
}
}
根本没有理由涉及指针:
void HandleCLient(Socket socket){
//...
}
//...
while (true) {
//Construct in-place
Spawn([s=Socket(acceptor.Accept)]() mutable
{
HandleClient(std::move(s));
}).Detach();
}
感谢@rafix07 指出需要添加 mutable
。