第一个难道move传不过去?
为什么我能编过
#include <memory>
using namespace std;
void MyFunc(unique_ptr<int> arg)
{
}
int main(int argc, char* argv[])
{
unique_ptr<int> ptr = unique_ptr<int>(new int(1234));
MyFunc(move(ptr));
return 0;
}
【 在 xxpxxxxp (xxpxxxxp) 的大作中提到: 】
: 标 题: Re: 到底怎么传unique_ptr有定论了吗
: 发信站: 水木社区 (Fri Feb 28 01:17:17 2020), 站内
:
: 第一个别想
: void Capture(std::unique_ptr<std::string> str);
: 这个根本传不过去的,只能用第二个,move进去
:
: 第二个问题,去年面G家时候跟他们讨论了一下(面试已挂勿念),他们说项目中用法是:
: 调用Justuse这个函数之后,如果这个unique_ptr之后再也不用了,也就是说所有权可以转移出去,那么用
: void Justuse(const std::unique_ptr<std::string>&& str);
: 交出所有权。
: 如果之后还会用这个unique_ptr,也就是说所有权依然在当前函数里,那么建议使用
: void Justuse(std::string* str);
: 传入裸指针,在调用函数里不得修改、释放,所以最好声明为const
:
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 114.243.153.*]
--
FROM 171.83.9.*