Creating on the stack can give you more problems than it solves, you have less control on when the object is deleted and could cause great confusion in debugging. For example, if you use it as a child of a parent, then there is a chance that the object could be double-freed (once by going out of scope and again by a parent).