from https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#f7-for-general-use-take-t-or-t-arguments-rather-than-smart-pointers
Passing a smart pointer transfers or shares ownership and should only be used when ownership semantics are intended. A function that does not manipulate lifetime should take raw pointers or references instead.
Passing by smart pointer restricts the use of a function to callers that use smart pointers. A function that needs a widget should be able to accept any widget object, not just ones whose lifetimes are managed by a particular kind of smart pointer.
we use shared_ptr for params a lot in LUS, it'd be good to do a bit of an audit on those, with a goal of making it easy for someone reading the code to infer information about the lifecycle of a shared_ptr
from https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#f7-for-general-use-take-t-or-t-arguments-rather-than-smart-pointers
we use
shared_ptrfor params a lot in LUS, it'd be good to do a bit of an audit on those, with a goal of making it easy for someone reading the code to infer information about the lifecycle of ashared_ptr