2012-07-09 12 views
6

Widzę dwa rozsądne rozwiązania problemu członka biorąc własności parametru:członkiem biorąc własności parametru

Foo::Foo(std::unique_ptr<int> parameter) 
: member(std::move(parameter)) 
{ 
} 

Bar::Bar(std::unique_ptr<int> parameter) 
{ 
    member.swap(parameter); 
} 

Która z nich jest bardziej idiomatyczne, łatwiejsze do zrozumienia, łatwiejsze do debugowania, łatwiejsze do utrzymania itp.?

Czy istnieją dodatkowe rozwiązania problemu, który przeoczyłem?

Odpowiedz

12

Zawsze preferuj listę inicjalizatorów. Ponadto obejmuje on typy, które można przenosić, ale nie zamieniać, na przykład, lub typy, które mogą wymagać wykonania kosztownych operacji dla domyślnej konstrukcji - lub nawet typów, których po prostu nie można skonstruować domyślnie.