Здравствуйте, DanilB, Вы писали:
DB>Попробуй в деструкторе DB>~A(){if(X) {delete X; X = NULL;} }
Ну это не поможет.
Как я понял из выше сказанного, в "return temp" передаётся не сам temp а его копия.
И т.к. компилятор "не знает" как копировать память на которую ссылается *X, то нужно определить контсруктор копирования A(const A &a), где а — объект который копируется.
Так что, деструктор вызывается по одному разу для двух разных объектов. Один раз для temp в строке "return temp". И второй раз для его копии в aaa.NewA(77);