- 主题:return unique_ptr
RVO的本质是将返回对象直接在调用者的栈上构造。
你这个写法要求res也要构造在调用者的栈上,目前编译器还无法做到。
【 在 ziqin 的大作中提到: 】
: 其实也有特殊情况,可能是VS2019的bug,不过下面的代码VS2019编不过去,要显示std::move(std::get<0>(res));
:
: struct A
: ...................
--来自微水木3.5.11
--
FROM 39.144.44.*
也不行。和之前的写法一样,即要求编译器识别出tuple中元素就是要返回的对象, 从而对它事先进行替换。
【 在 here080 的大作中提到: 】
: 那你看我那个写法?
: 【 在 foliver (Oliver) 的大作中提到: 】
: : 标 题: Re: return unique_ptr
: ...................
--来自微水木3.5.11
--
FROM 140.206.195.*
按照C++参考手册,返回纯右值,用纯右值初始化这两种情况不要用copy move构造函数。
其余其他情况依然需要copy move构造,但是不会调用。比如你的get函数写成
ok a(5)
return a
就过不了,虽然运行不会调用copymove构造函数。
【 在 bihai 的大作中提到: 】
: C++17
: #include <stdio.h>
: #include <memory>
: ...................
--来自微水木3.5.11
--
修改:foliver FROM 140.206.195.*
FROM 140.206.195.*
就我个人理解,unique ptr是无法做rvo优化的,等我哪天看看我编译后代码。
【 在 bihai 的大作中提到: 】
: 对,但你这不是楼主的问题。
:
: 【 在 foliver 的大作中提到: 】
: ...................
--来自微水木3.5.11
--
FROM 140.206.195.*