C++ 在std::unique\u ptr下移动值
我有一个函数C++ 在std::unique\u ptr下移动值,c++,memory-management,unique-ptr,C++,Memory Management,Unique Ptr,我有一个函数foo(T值),其中T是move only。我想(出于某些原因)分配T类型的value,并调用foo 我可以这样做吗 { std::unique_ptr<T> ptr = make_unique<T>(T()); foo(std::move(*ptr)); } 根本没有理由使用指针: void HandleCLient(Socket socket){ //... } //... while (true) { //Construct
foo(T值)
,其中T
是move only。我想(出于某些原因)分配T
类型的value
,并调用foo
我可以这样做吗
{
std::unique_ptr<T> ptr = make_unique<T>(T());
foo(std::move(*ptr));
}
根本没有理由使用指针:
void HandleCLient(Socket socket){
//...
}
//...
while (true) {
//Construct in-place
Spawn([s=Socket(acceptor.Accept)]() mutable
{
HandleClient(std::move(s));
}).Detach();
}
感谢@rafix07指出需要添加
mutable
完全没有理由涉及指针:
void HandleCLient(Socket socket){
//...
}
//...
while (true) {
//Construct in-place
Spawn([s=Socket(acceptor.Accept)]() mutable
{
HandleClient(std::move(s));
}).Detach();
}
感谢@rafix07指出需要添加
mutable
为什么在lambda中没有创建socket
?似乎它是专用于此的。您至少应该显示“仅移动”的函数,因为您正在询问有关移动语义的问题,完全有可能您对函数本身感到困惑。为什么socket
不是在lambda内部创建的?看起来它是专用的,你至少应该显示“仅移动”的函数,因为你在问一个关于移动语义的问题,你完全可能对函数本身感到困惑。