Gibt es eine Änderung der Schnittstelle, mit der der zweite Aufruf funktionieren kann?
Oder soll ich alles so lassen, wie es ist?
Ich vermute, dass die zusätzliche Konstruktion im ersten Fall absichtlich so gestaltet wurde, damit klar ist, dass das Eigentum übertragen wird.
#include <memory>
struct Bar { };
typedef std::unique_ptr<Bar> UPBar;
void foo1( UPBar p ) { }
void foo2( UPBar p ) { foo1( move( p )); }
void foo3( UPBar p ) { foo2( move( p )); }
void foo4( UPBar p ) { foo3( move( p )); }
int main(int argc, char** argv)
{
UPBar p( new Bar );
foo4( move( p )); // ok, but requires an extra construction vs line below
foo4( new Bar ); // fails: any modification to get this to work?
return 0;
}
Zweite Frage: Wenn ich alle Parameter ändere, die an RValue-References (&&) übergeben werden, hat das irgendwelche Nachteile? Sollte ich in der Tat sicherstellen, dass alle meine std::unique_ptr<>
Parameter von RValue-References übergeben werden?