Supongamos que tengo una estructura de C++ que tiene tanto variables miembro no-POD POD y:¿Hay alguna manera de hacer un valor de estructura de C++: inicializar todas las variables de miembro de POD?
struct Struct {
std::string String;
int Int;
};
y para que mi programa para producir un comportamiento reproducible quiero tener todas las variables miembro inicializados en la construcción. Puedo usar una lista de inicialización para que:
Struct::Struct() : Int() {}
el problema es tan pronto como tengo que cambiar mi estructura y añadir una nueva variable miembro de POD (digamos bool Bool
) corro el riesgo de olvidar para añadirlo a la lista de inicialización. Entonces, la nueva variable miembro no se inicializará en valor durante la construcción de la estructura.
Además no puede utilizar el memset()
truco:
Struct::Struct()
{
memset(this, 0, sizeof(*this)); //can break non-POD member variables
}
porque llamando memset()
para sobrescribir variables miembro-POD no ya construidas pueden romper esos.
¿Hay alguna forma de imponer la inicialización de valor de todas las variables miembro POD sin agregar explícitamente su inicialización en este caso?
recomendaría cada miembro ser 'const' Especialmente cuando todos son 'públicos', realmente tiene sentido forzar la inmutabilidad. Puede usar la sintaxis de inicialización de array para crear instancias: 'Struct s = {" ... ", 0};' –
@Daniel: ¿Y cuándo quiero ponerlo en un contenedor? – GManNickG
@GMan: en este caso, lo colocaría en un 'std :: shared_ptr'. O tal vez decida encapsular adecuadamente los miembros y eliminar el 'const'. –