У меня есть следующие структуры данных:Различия между распределением указателя кучи
struct Inner
{
int myValue;
};
struct Outer
{
Inner* inner;
};
Вариант 1
Если я сделать следующее:
Outer outer;
outer.inner = NULL;
outer.inner = new inner;
inner* pInner = outer.inner;
, а затем добавить часы для следующие 2 значения:
- outer.inner
- Пиннер
, то они оба не-NULL, и равны по величине.
Вариант 2
Если я сделать следующее:
Outer outer;
outer.inner = NULL;
inner* pInner = outer.inner;
if (! pInner)
{
pInner = new inner;
}
затем Пиннере указывает на действительной памяти кучи, и outer.inner еще NULL.
Вопросы
Почему варианты различны - они не должны быть оба, указывая на ту же область памяти в варианте 2, а?
Предполагая, что я пошел с вариантом 1, и тогда я был , читал значения из внутреннего. Тогда я мог бы использовать pInner и outer.inner, не так ли? Почему это отличается от выделения памяти?
pInner будет * всегда * быть нулевым в инструкции if, поэтому вы всегда выполняете pInner = new inner.Поэтому мне ясно, что pInner - это действительная память кучи. external.inner никогда не затрагивается после инициализации, поэтому его ясный для меня внешний .inner == NULL –