关于new的一些疑问,该怎么处理

关于new的一些疑问
学习了new   有些疑问:
1.   new到底在程序里面有什么用?难道仅仅是节省内存的作用?   在动态数组中难道仅仅是不确定其元素数量而用么?   就象下面一样
      cin   > >   n;
      int   arr   [n];       //这个肯定不行   n没有确定   不能为变量?

      cin   > >   n;
      int   *pt   =   new   int   [n];       //PASSING,动态数组;

我实在不理解   一个new难道就只有这个作用吗?

2.在单单使用指针的时候,new还有用吗?
    int   num     =   16;
    int   *pn   =   #

    int   *pt   =   new   int;

第1个式子可以用   *pn和num来访问,而第二的只能用*pt来访问   这不是有局限性了么?

3.   既然有动态数组,动态结构,结构数组,会有   动态结构数组和结构动态数组吗?


------解决方案--------------------
动态
就是运行时刻来分配空间

new的作用主要是在这, 可以根据程序运行过程中的需求随时分配空间
而且原则上new可以分配很大的空间 :)

第二个没用局限性啊, 你分配快内存当然要一个指针指向那个地方了, 这里的*pt和num等价
你要说上面的一个多了一个指针... 那么你可以再定义一个指针指向这个指针的位置即可.
你给前一个起了两个名字, 给后一个起了一个名字, 又说第一个名字比第二个名字多, 所以第一个厉害.. 这本来就是你自己造成的不公平

如果你所有要求用到的全用静态方法分配内存, 编译出来的程序可能是一个庞大的无法承受的东西.
------解决方案--------------------
new 的作用,或者说 new 存在的目的:
1 可以使用堆内存,就是所谓的“节省(栈)内存”;
2 为了灵活控制,new 可以实时分配、生成对象,并且长期有效。如果是
int num = 16;
int *pn = #
这样的方式, 必须先定义 num ,这个在很多情况下是不切实际的,而且和第一点也在一定程度上存在冲突,同时 num 的生命期也无法和 new int 获得的相提并论。

所以,通常考虑两个因素是否使用 new:
1 对象是否是大对象(是否需要比较大的内存空间,当然还需要相对考虑其他部分的程序需求);
2 生命期,局部对象的生命期总是有限的,当然你可以return,但是如果有多个到时候,无法全部return, 那么使用 new, 然后将指针赋值是一个办法(当然还有别的办法)
------解决方案--------------------
new做了两件事:
1、分配内存,按你的需要分配内存。
2、调用所分配类型的构造函数。
但lz的问题1所涉及的不是new,而是new[]。
new[]也做了两件事:
1、分配内存,按你的需要分配内存。
2、调用所分配内存中每一个对象的构造函数。
上述的第二步在C++中起了至关重要的作用。
数组分配在栈、全局和其他对象内部,需要在编译前确定其大小。而new获得的内存是在程序运行时分配的*内存(堆内存),所以可以根据运行时的数据确定其大小。堆内存可以件了不起的发明,没有它,我们现在的绝大多数系统将无法运行。至少无法高效运行。

问题2:仅看着两句:
int num=6;
int *pt=new int;
他们是等价的,对吧?都是一个symbol对应一个对象,所不同的是num是直接引用,而pt是间接引用。
那么如果改写成这样呢?
int num=6;
int *pn=#
int *pt=new int;
int *pt1=pt;
不还是一回事吗?都分别由两个symbol对应每个对象吗?