В вашем примере, когда ваш return y;
компилятор сделает неявное преобразование и сам создаст myint
. Взгляните Явное ключевое слово .
Итак, из-за этого 2 объекта созданы не из одного. Первый объект в вашей основной функции и второй временный объект в вашем operator +=
. Когда у нас есть два объекта, у нас есть два вызова дескриптора, когда функция main
завершается.
Решение
Используйте ссылку и явное ключевое слово для безопасности:
#include <iostream>
using namespace std;
class myint {
public:
int x;
explicit myint(int x) { this->x = x;}
~myint() {cout << "DEL " <<endl; }
myint& operator += (int const &y) { this->x += y; return *this;}
};
int main() {
myint i = myint(2);
i += 3;
}