我试图返回一个std::unique_ptr类
成员变量(尝试移动所有权)给调用者。以下是样例代码片段:
class A {
public:
A() : p {new int{10}} {}
static std::unique_ptr<int> Foo(A &a) {
return a.p; // ERROR: Copy constructor getting invoked
// return std::move(a.p); WORKS FINE
}
std::unique_ptr<int> p;
};
我以为编译器(gcc-5.2.1)可以在不需要通过std::move()
明确指定意图的情况下,在这种情况下进行返回值优化(复制省略)。但事实并非如此。为什么?
以下代码似乎可以正常工作,看起来是等效的:
std::unique_ptr<int> foo() {
std::unique_ptr<int> p {new int{10}};
return p;
}