Yeah this is bad. If you create an object using new you should also clean it up using delete, but in your code you have no way of doing that because the vector is storing a copy of the object that was creates using new.
There is no point using new here at all. Just create a temporary object that you pass to push_back, like this:
Calling new also calls the constructor. What @Peter87 and @MiiNiPaa were showing you was a statically allocated temporary object (located on the stack) which is destroyed when going out of scope rather than a dynamically allocated object (located on the heap) which is never destroyed because it is never deleted.
Line 12 (new cls) in your original post and line 1 in @MiiNiPaa's post ( cls() ) both call the same constructor.