int *p = new() int(10);
这个是申请一片内存区域,保存一个int对象,p指向该int对象的首地址;
int *q = 10;
这个语句应该有点问题写成这样 int *q = (int *)10;意思是定义一个int型指针q,并将q所指向的内存地址强制设置为10。
造成的结果是,如果输出的话 对于p,*p的值为10 ,而p所指向的内存地址不固定,而对于q,q的值为10,而*q一般访问会出错;
采用Vs运行情况如下:

继续单步运行会导致程序崩溃;
q指针这种用法一般用在已经有了某个对象,直接将新申请的指针指向该对象。通过指针传递参数。
至于new,申请的内存空间位于堆中,需要手动释放或者程序结束时会自动释放,new之后会调用构造函数或者拷贝构造函数;前者这样的形式:
A *Pa1 = new A;
后者一般是这样的形式 :
A a;
A *pA2 = new A(a);
第二种方式不建议用因为容易造成内存泄漏。
至于delete,可以释放new申请的内存,一般当new所产生的指针不再使用时,调用delete 指针;释放指针所指向的内存地址。
个人观点,如有错误,欢迎改正。