new当您希望某个对象一直存在直到您将delete其保留时,应使用它。如果不使用new,则超出范围时该对象将被销毁。例如:void foo(){ Point p = Point(0,0);} // p is now destroyed.for (...){ Point p = Point(0,0);} // p is destroyed after each loop有人会说使用new决定您的对象是在堆上还是在堆栈上,但这仅适用于在函数内声明的变量。在下面的示例中,“ p”的位置将是其包含对象Foo的分配位置。我更喜欢称这种“就地”分配。class Foo{ Point p;}; // p will be automatically destroyed when foo is.使用来分配(和释放)对象new要比就地分配对象昂贵得多,因此应将其使用限制在必要的地方。何时分配via的第二个示例new是数组。您无法*在运行时更改就地数组或堆栈数组的大小,因此在需要大小不确定的数组时,必须通过new分配它。例如void foo(int size){ Point* pointArray = new Point[size]; ... delete [] pointArray;}(*先发制人的挑剔-是的,有些扩展允许大小可变的堆栈分配)。
总是使用New来分配动态内存,然后必须释放它。通过执行第一个选项,当范围丢失时,该内存将自动释放。Point p1 = Point(0,0); //This is if you want to be safe and don't want to keep the memory outside this function.Point* p2 = new Point(0, 0); //This must be freed manually. with...delete p2;