TODO Smart - pointers Pass as function param When and what use std::unique_ptr vs std::share_ptr, performance