Another big advantage is that you can just delete it when you're done with it.
When you create an object on the stack, it isn't removed until it goes out of scope.
And when you use pointers you create an abstraction, you can change which objects are being the target of the code, without affecting other parts of the code.
For example:
int selection = 1;someclass *ptr1, *ptr2, *target;ptr1 = new someclass;ptr2 = new someclass;ptr1->value = 42;ptr2->value = 0;// Set targetif (selection == 1) target = ptr1;else target = ptr2;// This part of the code is seperatedtarget->value = target->value * target->value;