Я пытаюсь вернуть члену std::unique_ptr class
(попытка переместить право собственности) на вызывающего. Ниже приведен пример фрагмент код:Возвращаемый элемент 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;
}
Это отличный первый вопрос. Добро пожаловать в StackOverflow! – Barry