Delegating constuctors are indeed a new feature that introduces a new destruction logic.
Let us revisit the lifetime of an object: An object’s lifetime begins when some constructor has finished. (See 15.2/2. The standard calls this the “principal constructor”.) In your case, this is the constructor X(int). The second, delegating constructor X() acts as just a plain member function now. Upon scope unwinding, the destructors of all fully-constructed objects are called, and this includes x.
The implications of this are actually quite profound: You can now put “complex” work loads into a constructor and take full advantage of the usual exception propagation, as long as you make your constructor delegate to another constructor. Such a design can obviate the need for various “init”-functions that used to be popular whenever it wasn’t desired to put too much work into a regular constructor.
The specific language that defines the behaviour you’re seeing is:
[C++11: 15.2/2]:[..] Similarly, if the non-delegating constructor for an object
has completed execution and a delegating constructor for that object exits with an exception, the object’s destructor will be invoked. [..]