Pointeur de Membre de l'Initialisation d'une Variable dans des Classes C++
Cela va sembler aussi élémentaire que de faire un pense que j'ai fait sans effort de trouver la réponse moi-même, mais je vous jure que j'ai fait de la recherche pendant environ 20 minutes et n'a trouvé aucune réponse.
Si un privé membre de classe c++ variable (non statique) est un pointeur, et il n'est PAS initialisé dans le constructeur (soit par le biais d'une liste d'initialisation ou d'une cession dans le constructeur), quelle sera sa valeur lorsque la classe est entièrement instancié?
Question Bonus: Si la réponse à la question ci-dessus n'est rien d'autre que NULL, et je souhaite de toujours initialiser un pointeur de variable à NULL, et j'ai de nombreux constructeurs, dois-je vraiment mettre une initialisation explicite pour que le pointeur à chaque constructeur-je écrire? Et si oui, comment faire pour les pros gérer cela? Sûrement personne ne se met redondant initialiseurs pour le même membre dans toutes leurs constructeurs, ils faire?
EDIT: je souhaite que je pourrais avons choisi deux réponses ici. Les pointeurs intelligents recommandé par Bip Bloup semblent être les elegantest approche, et il a obtenu le plus de votes. Mais puisque je n'ai pas fait d'utiliser des pointeurs intelligents dans mon travail (encore), j'ai choisi les plus représentatifs de réponse qui n'avaient pas l'utilisation des pointeurs intelligents comme la réponse.
OriginalL'auteur John Fitzpatrick | 2011-12-06
Vous devez vous connecter pour publier un commentaire.
Vous êtes en train de penser correctement. Si vous n'avez pas l'initialiser, il pourrait être n'importe quoi.
Donc la réponse à votre question est pourtant, que ce soit l'initialiser avec quelque chose, ou de lui donner une valeur NULL (ou nullptr, dans la plus récente de la norme C++).
Notre défaut ctor ici la rend NULLE (remplacer par
nullptr
si nécessaire), le deuxième constructeur de l'initialiser avec la valeur passée (ce qui n'est pas garanti d'être bon!!!!).Il serait également nécessaire de l'initialiser à
NULL
/nullptr
. Ce que j'ai tendance à faire si j'ai plusieurs constructeurs qui doivent faire commun de l'initialisation, est de mettre en œuvre un privécommonConstruct()
méthode qui n'est d'initialisation par défaut pour moi.Est-il NUL et 0 de la même manière? Pourrait-il être B():a_(0){}; avec un effet identique?
oui, il s'étend à
0
ou0L
. Toutefois, en C++11, vous avez réellement unnullptr
mot-clé. Le plus grand avantage de ceci est que vous pouvez maintenant faire la distinction entre un pointeur est null, et un entier qui vaut 0 🙂Pouvez-vous me donner un lien pour le standard qui confirme que votre demande?
OriginalL'auteur Moo-Juice
La valeur non initialisée, donc oui, vous ne devez explicitement l'initialiser à
nullptr
.À l'aide de pointeurs intelligents (
std::unique_ptr
,std::shared_ptr
,boost::shared_ptr
, etc.) signifie que vous n'avez pas besoin de le faire explicitement.OriginalL'auteur
la valeur d'un pointeur non initialisé est toujours à la poubelle, c'est un hasard de la mémoire d'adresse.
dans votre constructeur, vous pouvez utiliser l'initialiseur de listes pour initialiser le pointeur de la souris
simplement
en essayant de faire référence à un pointeur non initialisé déclenche un comportement indéfini.
afin de TOUJOURS initialiser le pointeur de la souris.
grr @ saisie semi-automatique.. lol firefox
Merci pour la rigolade 😉
plus que bienvenue
OriginalL'auteur johnathan
Valeur ne sera pas défini.
Vous pouvez avoir un "ultime" ctor initialiser tous champs et d'ajouter "coupé court" ctors avec une partie seulement de paramètres, qui va passer de ces paramètres à l'ultime ctor le long avec des valeurs par défaut pour le reste de params.
OriginalL'auteur Victor Sorokin