Почему при исключении m_node (0) избежать инициализации m_node при создании экземпляра node_iterator?
То, что вызывается конструктор по умолчанию для node_iterator
, не означает, что нестатические члены-данные самого класса должным образом инициализированы, особенно если для этих данных не указана инициализация.члены.Это включает в себя исключение этих нестатических членов-данных из списка инициализации конструктора.Кроме того, m_node
является указателем и, следовательно, POD-типом, поэтому у него нет конструктора по умолчанию, который вызывался бы для создания объекта перед вводом тела конструктора для самого node_iterator
.Поэтому исключение m_node
из списка инициализаторов позволит избежать конкретной инициализации m_node
data_member.
Не будет ли m_node инициализироваться по умолчанию (то есть инициализироваться нулем) в любом случае?
Согласно спецификации C ++ 03, раздел 8.5 / 9, нестатический объект (который также включает в себя нестатический элемент данных класса) инициализируется значением «неопределенный», если не указан инициализатордля этого объекта.Нестатический объект инициализируется по умолчанию только в том случае, если это тип класса, отличного от POD, и / или тип, соответствующий стандарту const.В этом случае m_node
является типом указателя и, следовательно, типом POD, поэтому он не инициализируется нулями ... он просто «инициализируется» любым ранее существовавшим значением в памяти в месте расположения переменнойчто делает его «неопределенным» значением, с которым оно инициализируется.