Ver Mensaje Individual
  #6 (permalink)  
Antiguo 13/04/2016, 01:06
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Tengo este algoritmo: Duda con condicional

Cita:
Iniciado por Instru Ver Mensaje
Sin embargo, si el valor fueran arreglos o estructuras mas complejas, no hay inicialización, por lo que podrías obtener basura en los diferentes campos.
Si el campo "valor" del mapa únicamente puede devolver basura si se trata de un objeto y su constructor por defecto no está correctamente implementado.

El motivo es que std::map, al pedirle una clave que no existe, crea una nueva entrada en su lista interna y el campo "valor" se inicializa llamando a su constructor por defecto (si lo hubiese) o asignando el valor 0, el cual es aceptado por todos los tipos nativos (int, float, double, char, punteros...)

Lo que sí que puede presentar basura (o incluso un casque en la aplicación) es, en el caso de que el campo valor sea un puntero, intentar acceder al contenido del mismo. A estas alturas de la vida todos entendemos que acceder al contenido de un puntero nulo no es nunca una buena idea.

Lo comentado anteriormente explica por qué podemos tener problemas al intentar meter en el campo valor de un mapa una clase con su constructor por defecto deshabilitado (por ejemplo declarado en la parte private) o borrado (usando delete en C++11 en adelante). La razón que subyace detrás es que en el caso de los templates el compilador únicamente compila las funciones que se usan realmente. En este caso el operador[], de usarlo, trata de llamar al constructor por defecto y eso tira un error de compilación... pero si se evita su uso el mapa no tendrá inconvenientes en aceptar objetos sin constructor por defecto.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.