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;
};
この場合、コンパイラ (gcc-5.2.1) は戻り値の最適化 (コピー省略) を行うことができると思いましたstd::move()
。しかし、そうではありません。なぜだめですか?
次のコードは正常に動作しているように見えますが、これは同等のようです。
std::unique_ptr<int> foo() {
std::unique_ptr<int> p {new int{10}};
return p;
}