Supposons que j'ai une struct C++ qui a à la fois POD et des variables non membres POD:Existe-t-il un moyen de créer une valeur de structure C++: initialise toutes les variables de membre POD?
struct Struct {
std::string String;
int Int;
};
et pour que mon programme pour produire un comportement reproductible Je veux avoir toutes les variables membres initialisés à la construction. Je peux utiliser une liste d'initialiseur pour que:
Struct::Struct() : Int() {}
le problème est que dès que je dois changer mon struct et ajouter une nouvelle variable membre POD (par exemple bool Bool
) je risque d'oublier de l'ajouter à la liste des initialiseur. Ensuite, la nouvelle variable membre ne sera pas initialisée lors de la construction de la structure.
Aussi je ne peux pas utiliser l'astuce memset()
:
Struct::Struct()
{
memset(this, 0, sizeof(*this)); //can break non-POD member variables
}
parce que l'appel memset()
à écraser les variables déjà construites membres non-POD peuvent briser ceux-ci.
Existe-t-il un moyen d'appliquer l'initialisation de valeur de toutes les variables de membre POD sans ajouter explicitement leur initialisation dans ce cas?
Je recommande chaque membre être 'const'. Surtout quand ils sont tous «publics», il est logique de forcer l'immutabilité. Vous pouvez utiliser la syntaxe d'initialisation de tableau pour créer des instances: 'Struct s = {" ... ", 0};' –
@Daniel: Et quand je veux le mettre dans un conteneur? – GManNickG
@GMan: Je le placerais dans un 'std :: shared_ptr' dans ce cas. Ou peut-être décider d'encapsuler correctement les membres et supprimer le 'const'. –