ptr, ref and singleton