Предположу, что у вас в коде что-то типа
UI myUi = UI();
в итоге получается, что создаётся временный объект, пропихивает калькулятору себя, потом просходит копирование этого объекта в конечную переменную (поэлементно, поскольку конструктора копирования нет)
... и временный объект удаляется, при этом в калькуляторе остаётся указатель на временный объект, а не на реальный. Потому и разные указатели в this и calc->ui. Потом происходит обращение в уже освобожденную память, и знакомый вам SegFault (он только по записи возникает, читать освобожденную память дозволяется)