Todavía hay muchos casos en los que una referencia a un puntero inteligente es una buena idea. Un ejemplo obvio es el método de asignación de la clase de puntero inteligente, que acepta una referencia a otro puntero inteligente como su parámetro.
Hacer que un método acepte una referencia de puntero inteligente significa que el parámetro no incrementa la cuenta de referencia interna del puntero inteligente. Esto puede mejorar el rendimiento, pero probablemente no mucho. Además, hay muchas cosas que el método no puede hacer con la referencia, o con el puntero inteligente original. Si sabes lo que son estas cosas y las evitas, pasar por referencia funciona muy bien. Por supuesto, el propósito de los indicadores inteligentes es evitar tener que saber estas cosas.
Además, si tiene un método que modifique el valor de un parámetro de puntero inteligente, pasar como referencia es obligatorio, como ocurre con cualquier otro tipo.
Es la misma razón por la cual el almacenamiento de referencias a otros tipos de objetos es malo, el objeto puede ser destruido y tendrá una referencia colgante. Se supone que los punteros inteligentes mantienen vivo el objeto al que apuntan, pero no estamos hablando del objeto apuntado, estamos hablando del objeto puntero inteligente en sí mismo. – bames53
Consulte http://stackoverflow.com/questions/327573/c-passing-references-to-boostshared-ptr –