Это потому, что вы не объявили оператор присваивания для вашего класса, который будет принимать int в качестве аргумента.Поскольку такого оператора не существует, компилятору необходимо использовать обходной путь: он создает временный объект, используя конструктор A (int).Вы можете избежать такого поведения, сделав конструктор явным:
explicit A(int x_ = 1) : x(x_) { }
После создания временного объекта он копируется в 'a', используя предоставленный конструктор копирования для A. Сразу после этого временный объект уничтожается и вызываетего деструктор.
Этот подход неэффективен.Чтобы сделать его лучше, вы должны определить оператор присваивания для A, взяв в качестве аргумента int:
A& operator= (int x_) {
x = x_;
return *this;
}