Estoy tratando de "modernizar" algún código existente.Pasando unique_ptr a las funciones
- Tengo una clase que actualmente tiene una variable miembro "Device * device_".
- Utiliza new para crear una instancia en algún código de inicialización y tiene un "dispositivo delete_" en el destructor.
- Las funciones miembro de esta clase llaman al muchas otras funciones que toman un Dispositivo * como parámetro.
Esto funciona bien, pero a "modernizar" mi código pensé que debía cambiar la variable que se define como "std::unique_ptr<Device> device_"
y retire la llamada explícita a eliminar, lo que hace el código más seguro y en general mejor.
Mi pregunta es la siguiente -
- ¿Cómo debería entonces pasar el dispositivo de _ variable para todas las funciones que lo necesitan como un parámetro de?
Puedo llamar .get para obtener el puntero sin formato en cada llamada a la función. Pero eso parece feo y desperdicia algunas de las razones para usar un unique_ptr en primer lugar.
O puedo cambiar cada función de manera que en lugar de tomar un parámetro de tipo "Dispositivo *" ahora toma un parámetro de tipo "std :: unique_ptr &". Lo cual (para mí) ofusca un tanto los prototipos de funciones y los hace difíciles de leer.
¿Cuál es la mejor práctica para esto? ¿Me he perdido otras opciones?
¿Por qué este cambio que el código sea más seguro y generalmente mejor? De su descripción, diría que todo lo contrario es verdad. –
@James Kanze Estoy de acuerdo, unique_ptr no parece comprar nada en este caso. – juanchopanza
Es posible que tenga razón. Me gusta la "seguridad" de unique_ptr en el sentido de que no tiene que acordarse de eliminarlo, pero parece que tiene algún costo en este caso. – jcoder