Habrá que comprobar que headers esta vacío
¿Qué utilizas del header? ¿Existe? Si no existe, o usas uno por defecto, o tiras error.
Por ejemplo, si Properties fuera un map<string,string>, donde la clave fuera el nombre del header:
-Cuando vayas a colocar el host, primeor lo buscas. Si noe xiste, 1 de 2: o pones el que tu programa genera, o tiras error.
La pregunta es: Si la función va a tirar error, ¿para qué le quieres pasar un valor "nulo"? En caso de que no tires error por ello, ¿para qué comprobar? Utilizas los datos que existan, y no utilizas los datos que no existan.
Y bueno, en caso de que ninguna de estas sirva, como un dato que sea opcional, pedir un puntero está bien, y no tienes porqué utilizar memoria dinámica. Basta utilizar el operador de referencia, &, a la hora de pasar el parámetro (o poner nullptr en caso de que lo quieras nulo).
pero eso de la heap lo odio.
Yo odio las multiplicaciones en matemáticas, no sé por qué deberían existir.