Use a strong smart pointer when defining an object, and a weak smart pointer when referencing an object