return a new object if `new` not used