Похоже, что мой объект изменяется после того, как я нажму push_back в std :: list.Почему мой объект изменяется после списка :: push_back()
Это объект перед push_back:
Посмотрите, как после некоторого действительного m_parent_reference указателя он в конечном итоге становится nullptr таким образом завершая цепь.
Это как мой объект выглядит после push_back()
Теперь нет nullptr больше. Вместо этого один parent_reference ссылается на свой дочерний элемент, создавая бесконечный цикл.
m_InterchangeList
имеет типstd::list<CKerEDIInterchange>
m_parent_reference
имеет типCKerEDIReference
CKerEDIInterchange
наследует отCKerEDIReference
- Ни
CKerEDIInterchange
, ниCKerEDIReference
есть пользовательский конструктор копирования - Я испытал это поведение с помощью Visual Studio 2010 SP1 и Visual Studio 2012 Обновление 2
- Переменная m_parent_reference может быть установлена только через конструктор
CKerEDIReference(const CKerEDIReference* const parent_reference = NULL) : m_parent_reference(parent_reference) {};
С пользовательскими конструкторами копирования и назначить оператор я мог наблюдать следующее:
- Присвоить Операторы никогда не называется
- Ссылки дается ` CKerEDIReference :: CKerEDIReference (const CKerEDIReference &) уже сломан, так как в нем уже есть этот бесконечный цикл.
редактировать Больше информации:
- Вызова
{CKerEDIInterchange tmp(nInterchange);}
делает не приводит к поврежденным объектам. - Нарезка не участвует. m_InterchangeList имеет
type std::list<CKerEDIInterchange>
и nInterchange если типаCKerEDIInterchange
Я действительно хотел бы знать, если кто-то может дать мне подсказку, где искать дальше.
Спасибо заранее, Ник Papagiorgio
Вы не должны публиковать код, который * не * помог воспроизвести проблему. Вы должны опубликовать код, который показывает проблему. Как мы должны выяснить, что в противном случае? –
Ваши родительские ссылки, указывающие на элементы в 'm_InterchangeList', случайно? Поскольку, когда список внутренне изменен, указатели становятся недействительными. – riv
Нет конструкторов копирования, но у ваших классов есть деструкторы? – john