Есть ли модификация интерфейса, которая может заставить работать второй вызов?
Или я должен оставить все как есть?
Я подозреваю, что дополнительная конструкция в первом случае была спроектирована таким образом, поэтому ясно, что право собственности передается.
#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;
}
Второй вопрос: если я изменю все параметры, переданные в RValue-References (&&), есть ли какие-либо недостатки в этом? Фактически, я должен гарантировать, что все мои std::unique_ptr<>
параметры переданы RValue-References?