Ich versuche, ein std::unique_ptr class
Mitglied (versucht, den Besitz zu verschieben) an den Aufrufer zurückgeben. Das folgende ist ein Beispielcode-Schnipsel:Returning-Member unique_ptr von der Klassenmethode
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;
};
Ich dachte, den Compiler (gcc-5.2.1) wäre in der Lage Rückgabewert Optimierung (Kopie elision) in diesem Fall zu tun, ohne die ausdrückliche Absicht über std::move()
zu erfordern. Aber das ist nicht der Fall. Warum nicht?
Der folgende Code scheint zu funktionieren, die äquivalent scheint:
std::unique_ptr<int> foo() {
std::unique_ptr<int> p {new int{10}};
return p;
}
Dies ist eine gute erste Frage. Willkommen bei StackOverflow! – Barry