Здравствуйте, Сергей Мухин, Вы писали:
СМ>this == bx??
Вроде единственно разумное объяснение, но нет , перепроверил this — это не bx.
Сначала думал на кривую оптимизацию компилятора, но тожде не она — отключил все оптимизации
A>BoundingBox& BoundingBox::combine(const BoundingBox& bx)
A>{
A> if (m_IsEmpty && !bx.m_IsEmpty)
A> {
A> m_Lower= bx.m_Lower; // 111
A> m_Upper= bx.m_Upper;
A> m_IsEmpty= bx.m_IsEmpty;
A> }
A>...
A>}
A>После строчки 111 меняется константная структура bx A> A>И как это понимать? А главное — как это поправить?
Каким образом определено, что структура меняется? Каким образом определено, что она меняется именно после этой строчки? Если это всё определено наблюдением за окном watch или локальных переменных в отладчике Visual Studio, то откуда уверенность, что отладчик показывает именно то, что происходит в действительности?
Здравствуйте, Centaur, Вы писали:
C>Каким образом определено, что структура меняется? Каким образом определено, что она меняется именно после этой строчки? Если это всё определено наблюдением за окном watch или локальных переменных в отладчике Visual Studio, то откуда уверенность, что отладчик показывает именно то, что происходит в действительности?
Да, именно через это окно и слежу за этой структурой. Она точно меняется, потому что программа некорректно себя ведет. И ведет себя именно так, как если бы эта структруа менялась
Здравствуйте, Anpek, Вы писали:
A>Это оператор присваивания вот такой
A>
A>inline Vector3d& operator = (const Vector3d &vect)
A> {
A> if (this != &vect)
A> memcpy(m_Vector, vect.m_Vector, sizeof(double) * 3);
A> return *this;
A> }
A>
A>где m_Vector — это double[3]
Тогда зачем вы переопределили оператор присванвания ? если он ведет себя как дефолтный ? внести побольше багов?
Здравствуйте, Anpek, Вы писали: A>Так вот, в этом операторе дебаггер заходит в ветку if (this != &vect) и (OOO, УЖАС), после вызова memcpy меняется vect.m_Vector A>Указатели m_Vector и vect.m_Vector — разные. A>Какого ....
Здравствуйте, Anpek, Вы писали:
A>Вот простенький кодец A>
A>BoundingBox& BoundingBox::combine(const BoundingBox& bx)
A>{
A> if (m_IsEmpty && !bx.m_IsEmpty)
A> {
A> m_Lower= bx.m_Lower; // 111
A> m_Upper= bx.m_Upper;
A> m_IsEmpty= bx.m_IsEmpty;
A> }
A>...
A>}
A>
A>После строчки 111 меняется константная структура bx A> A>И как это понимать? А главное — как это поправить?
А reinterpret_cast'ов над типом до этого никаких не делали? Может оно вообще до этого было другим типом?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]