new与delete的应用场景是什么?

C++中new运算符是创建了一个新的对象,比如

int *p = new() int(10);
int *q = 10

两个都是int型指针,初始化的值也一样,所以我的问题是他们两个什么区别呢?new的应用
场景在哪里?我感觉不用new也可以吧,请指点一下,谢谢。

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 指针;释放指针所指向的内存地址。

个人观点,如有错误,欢迎改正。

你的代码p指向一个变量但是是可以修改的,只是初始值是10,q指向一个常量10。而很多时候你是要动态定义变量并且使用它,这时候你就需要动态new一块空间和手动的delete将其释放。和C语言的malloc功能差不多,是C++提供的动态分配空间的方法。

比如这么个问题,从键盘输入n个数字,对它们排序后输出。n不知道有多大,你怎么写?
如果没有new,你得估计着写一个大小,比如
int a[100];
那么这个程序只能最大处理100个数字,101个肯定不行。
那么int a[100000]; 呢?
似乎可以满足需求了,但是问题是,即便我们只需要处理10个数字,程序还是得申请100000个单元,一个变量浪费这么多,一个大程序很多变量,每个变量都可能只用很少,也可能要用很大,没办法估算,都按照最大的申明岂不是要比实际需要的内存多很多倍的内存才能运行?

用new的好处就是,我们可以按需分配内存空间,既不担心分配少了不够,也不担心分配多了浪费。

感觉@caozhy 的回答的场景说的挺好理解的,这是其中一种典型应用情况。
此外如果你想深究的话,涉及到内存问题——堆和栈。你直接创建的对象一般是存在栈上的(除非是全局变量),而new出来的动态变量是分配在堆上的。
具体堆和栈的内容建议你去仔细查一下,堆和栈的区别。
比如在速度上(如果你的程序所运行的环境对速度很敏感);
还有不用的时候能不能被我们自己手动释放,这个比如说我们在main函数里要使用10000个int,但是我们不是在整个运行期间都要使用它的,那我们new出来以后,可以在我们不想用的时随时delete掉,而不用考虑变量的存在周期问题。
此外事实上,如果内存小一点的电脑,直接生命一个int[100000]的数组很可能运行时直接内存错误,因为"栈"的总大小一般不过几兆(MB),而new出来在"堆"上出问题的概率小得多,因为堆的大小接近总内存。
(此外后面来句题外话,直接开一个这么大的数组还有一个问题在于数组是一整块连续的内存,一个
int4字节,100000个接近400k,想在栈上面找到一块这么大的连续内存确实要拼人品。。。)
参考百度的一个回答:
  堆和栈的区别:
  一、堆栈空间分配区别:
  1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
  2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
  二、堆栈缓存方式区别:
  1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
  2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
  三、堆栈数据结构区别:
  堆(数据结构):堆可以被看成是一棵树,如:堆排序;
  栈(数据结构):一种先进后出的数据结构。

new和delete是在C++用来分派内存和解除内存的,必须成对出现,分配内存之后必须释放,否则会造成内存的泄漏,长时间运行会造成系统崩溃。其使用的功能类似于C中的malloc和free。还有一点需要注意。new 和 delete 不是函数,它们都是 C++ 定义的关键字。