Also von new und delete hattest du nirgends was gesagt
Aber wie dem auch sei... Größter Nachteil ist auf jedem fall, dass es keinen Garbagecollector wie in Java z.B. gibt. D.h. wenn du speicher mit new anforderst (new ruft übrigens auch den constructor auf), dann ist der solange belegt, bis du delete darauf anwendest. Wenn du das nicht machst, und sowas vielleicht auch noch in einer Schleife, kommt es zu sog. speicherlecks. Sobald dein RAM vollständig belegt ist, wird dann auf die festplatte ausgewichen und damit ist dein programm im prinzip nicht mehr lauffähig.
Ein anderer Nachteil ist natürlich die zusätzliche Indirektion, d.h. du gehst einen Umweg über den Pointer (mit dem dereferenzierungsoperator * oder ->), was das ganze in spezialfällen auch langsamer machen kann.
Normalerweise sollte man die pointer aber nur für zusammengesetzte datentypen benutzen (z.B. structs oder klassen, auch arrays, da arbeitest du schon immer mit pointern, ohne, dass du es gemerkt hast
). Das bedeutet ein "new int;" ergibt nicht wirklich viel sinn und wird auch normalerweise nicht benutzt.