小编axg*_*axg的帖子

从类方法返回成员unique_ptr

我试图将一个std::unique_ptr class成员(试图将所有权移动)返回给调用者.以下是示例代码段:

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;
};
Run Code Online (Sandbox Code Playgroud)

我认为编译器(gcc-5.2.1)能够在这种情况下进行返回值优化(复制省略),而不需要显式的intent via std::move().但事实并非如此.为什么不?

以下代码似乎工作正常,这似乎是等效的:

std::unique_ptr<int> foo() {
  std::unique_ptr<int> p {new int{10}};
  return p;
}
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers rvo c++11

13
推荐指数
1
解决办法
363
查看次数

标签 统计

c++ ×1

c++11 ×1

rvo ×1

smart-pointers ×1