return一个右值时是guaranteed RVO,形式上可以相当于move
其实1还有另一个更高级的情况:
unique_ptr<T> foo() {
unique_ptr<T> t(...);
return t;
}
此时是一个特殊规定,会让这个t相当于右值。
【 在 confinement (禁闭) 的大作中提到: 】
: 标 题: return unique_ptr
: 发信站: 水木社区 (Tue Aug 3 10:38:50 2021), 站内
:
: 我知道 unique_ptr 是不能copy的,所以下面的2是错误的,但是1那里是ok的,这个怎么解释呢?
:
: #include <iostream>
: #include <memory>
:
: using namespace std;
:
: class Foo { };
:
: unique_ptr<Foo> getUniquePtr()
: {
: return unique_ptr<Foo>(new Foo());
: }
:
: int main()
: {
: unique_ptr<Foo> ptrFoo = getUniquePtr(); // 1. ok
: // unique_ptr<Foo> ptrFoo2 = ptrFoo; // 2. err
: }
:
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 113.104.239.*]
--
FROM 76.126.252.*