Не ответ на проблему сбоев (которая уже была решена в любом случае), но следует отметить, что ваш оператор присваивания излишне расточителен, как написано в настоящее время:
matrix matrix::operator =(const matrix right)
Первая проблемачто он принимает параметр по значению.Это, конечно, означает, что когда происходит присвоение, подобное A = B
, создается копия B
и используется параметр right
функции.Но в текущем коде единственной целью этой копии было бы установить значения A
и затем уничтожить.Вы также можете передать const matrix&
, чтобы избежать копирования.(В качестве альтернативы вы можете оставить параметр как копию по значению, но реализовать весь оператор как copy-and-swap .)
Вторая проблема заключается в том, что возвращается matrix
.Это также может привести к созданию ненужной временной копии.И даже если компилятор может оптимизировать удаление копии, нет никакой цели, чтобы возвращение было копией по значению вообще.Стандартная форма оператора присваивания возвращает ссылку на объект, который был назначен.Таким образом, вы должны просто сделать этот тип возврата matrix&