【发布时间】:2016-09-30 22:00:05
【问题描述】:
我正在尝试将std::unique_ptr class 成员(尝试移动所有权)返回给调用者。以下是示例代码sn -p:
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;
}
【问题讨论】:
-
这是一个很好的第一个问题。欢迎使用 StackOverflow!
标签: c++ c++11 smart-pointers rvo